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实现根据指定端口探测服务器/模块部署的方法
Aug 25 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
Python 3中的yield from语法详解
Jan 18 Python
django加载本地html的方法
May 27 Python
Python应用库大全总结
May 30 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Django添加KindEditor富文本编辑器的使用
Oct 24 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
Python之变量类型和if判断方式
May 05 Python
零基础学Python之前需要学c语言吗
Jul 21 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
代码生成器 document.write()
2007/04/15 Javascript
Javascript Web Slider 焦点图示例源码
2013/10/10 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
NodeJS学习笔记之Connect中间件模块(一)
2015/01/27 NodeJs
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
分享一道关于闭包、bind和this的面试题
2017/02/20 Javascript
详解Node全局变量global模块
2017/09/28 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
Python多进程分块读取超大文件的方法
2016/04/13 Python
Python内置函数OCT详解
2016/11/09 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
Tensorflow实现卷积神经网络的详细代码
2018/05/24 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
高中军训广播稿
2014/01/14 职场文书
技能竞赛活动方案
2014/02/21 职场文书
节水倡议书范文
2014/04/15 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
采购员岗位职责范本
2015/04/07 职场文书
阿甘正传观后感
2015/06/01 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
Java中的随机数Random
2022/03/17 Java/Android