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 Mysql数据库操作 Perl操作Mysql数据库
Jan 12 Python
Python yield使用方法示例
Dec 04 Python
Python中time模块和datetime模块的用法示例
Feb 28 Python
python操作 hbase 数据的方法
Dec 18 Python
python 网络编程详解及简单实例
Apr 25 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
搞定这套Python爬虫面试题(面试会so easy)
Apr 03 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
Python内置类型性能分析过程实例
Jan 29 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
Python实现代码块儿折叠
Apr 15 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中$this-&amp;gt;含义分析
2009/11/29 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
document.getElementById介绍
2011/09/13 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
JavaScript function函数种类详解
2016/02/22 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
python中使用enumerate函数遍历元素实例
2014/06/16 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Flask配置Cors跨域的实现
2019/07/12 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
新员工入职感言
2014/02/01 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
工会经费申请报告
2015/05/15 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
比较几种Redis集群方案
2021/06/21 Redis
上个世纪50年代的可穿戴技术:无线电帽子
2022/02/18 无线电