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 相关文章推荐
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
Sanic框架蓝图用法实例分析
Jul 17 Python
10个Python小技巧你值得拥有
Sep 29 Python
对Python中plt的画图函数详解
Nov 07 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
pytorch构建多模型实例
Jan 15 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
利用scikitlearn画ROC曲线实例
Jul 02 Python
解决python运行效率不高的问题
Jul 20 Python
Pytest中skip skipif跳过用例详解
Jun 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循环跳出的问题
2013/07/01 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
项目实践之javascript技巧
2007/12/06 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
2013/12/01 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
JS实现数组的增删改查操作示例
2018/08/29 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
浅谈ECMAScript 中的Array类型
2019/06/10 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
Python中的二叉树查找算法模块使用指南
2014/07/04 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
销售业务实习自我鉴定
2013/09/23 职场文书
体育学院毕业生自荐信
2013/11/03 职场文书
校园招聘策划书
2014/01/09 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
2014年保管员工作总结
2014/11/18 职场文书
放弃继承权公证书
2015/01/23 职场文书
2014年底个人工作总结
2015/03/10 职场文书
文化大革命观后感
2015/06/17 职场文书
2015年主婚人婚礼致辞
2015/07/28 职场文书