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代码(逐级优化)
May 25 Python
Python常用库推荐
Dec 04 Python
使用Python监控文件内容变化代码实例
Jun 04 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python 日期排序的实例代码
Jul 11 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
python迭代器常见用法实例分析
Nov 22 Python
利用Python计算KS的实例详解
Mar 03 Python
matplotlib jupyter notebook 图像可视化 plt show操作
Apr 24 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
JS获取父节点方法
2009/08/20 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
jquery中实现时间戳与日期相互转换
2016/04/12 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
代码详解Vuejs响应式原理
2017/12/20 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
分享JS表单验证源码(带错误提示及密码等级)
2020/01/05 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
家长给孩子的评语
2014/01/30 职场文书
校运会口号
2014/06/18 职场文书
大学生党性分析材料
2014/12/19 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript