Python实现的基数排序算法原理与用法实例分析


Posted in Python onNovember 23, 2017

本文实例讲述了Python实现的基数排序算法。分享给大家供大家参考,具体如下:

基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。

实现代码如下:

#-*- coding: UTF-8 -*-
import numpy as np
def RadixSort(a):
  i = 0                       #初始为个位排序
  n = 1                      #最小的位数置为1(包含0)
  max = np.max(a)            #得到带排序数组中最大数
  while max/(10**n) > 0:       #得到最大数是几位数
    n += 1
  while i < n:
    bucket = {}               #用字典构建桶
    for x in xrange(0,10):
      bucket.setdefault(x, [])  #将每个桶置空
    for x in a:                #对每一位进行排序
      radix =(x / (10**i)) % 10  #得到每位的基数
      bucket[radix].append(x) #将对应的数组元素加入到相应位基数的桶中
    j = 0
    for k in xrange(0, 10):
      if len(bucket[k]) != 0:    #若桶不为空
        for y in bucket[k]:     #将该桶中每个元素
          a[j] = y            #放回到数组中
          j += 1
    i += 1
if __name__ == '__main__':
  a = np.random.randint(0, 1000, size = 10)
  print "Before sorting..."
  print "---------------------------------------------------------------"
  print a
  print "---------------------------------------------------------------"
  RadixSort(a)
  print "After sorting..."
  print "---------------------------------------------------------------"
  print a
  print "---------------------------------------------------------------"

运行结果:

Python实现的基数排序算法原理与用法实例分析

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中使用PDB库调试程序
Apr 05 Python
Python 实现数据库(SQL)更新脚本的生成方法
Jul 09 Python
LRUCache的实现原理及利用python实现的方法
Nov 21 Python
Python设计模式之中介模式简单示例
Jan 09 Python
用Eclipse写python程序
Feb 10 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
浅谈python中get pass用法
Mar 19 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 Python
python3.9之你应该知道的新特性详解
Apr 29 Python
Pyhton模块和包相关知识总结
May 12 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 #Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 #Python
python分析作业提交情况
Nov 22 #Python
Python分析学校四六级过关情况
Nov 22 #Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 #Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 #Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 #Python
You might like
学习php分页代码实例
2013/10/24 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP基于array_unique实现二维数组去重
2020/07/14 PHP
围观tangram js库
2010/12/28 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
JS组件系列之Bootstrap table表格组件神器【二、父子表和行列调序】
2016/05/10 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
微信小程序使用picker实现时间和日期选择框功能【附源码下载】
2017/12/11 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
用实例分析Python中method的参数传递过程
2015/04/02 Python
探究Python中isalnum()方法的使用
2015/05/18 Python
Python使用minidom读写xml的方法
2015/06/03 Python
安装python时MySQLdb报错的问题描述及解决方法
2018/03/20 Python
python opencv 图像尺寸变换方法
2018/04/02 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
后勤工作职责
2013/12/22 职场文书
工作人员思想汇报
2014/01/09 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
大学校务公开实施方案
2014/03/31 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书