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读取csv文件示例(python操作csv)
Mar 11 Python
Python3 能振兴 Python的原因分析
Nov 28 Python
python实现对一个完整url进行分割的方法
Apr 29 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
python处理大日志文件
Jul 23 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 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 SQL防注入代码集合
2008/04/25 PHP
php实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php 连接mssql数据库 初学php笔记
2010/03/01 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
Jquery实现$.fn.extend和$.extend函数
2016/04/14 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
JS限制输入框输入的实现代码
2018/07/02 Javascript
JavaScript中的 new 命令
2019/05/22 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
python中set常用操作汇总
2016/06/30 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
python常用运维脚本实例小结
2020/02/14 Python
如何通过python检查文件是否被占用
2020/12/18 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
大学生求职简历的自我评价
2013/10/21 职场文书
临床医学专业学生的自我评价分享
2013/11/21 职场文书
职业生涯规划书前言
2014/04/15 职场文书
银行稽核岗位职责
2015/04/13 职场文书
比赛口号霸气押韵
2015/12/24 职场文书