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实现简单的代理服务器
Jul 25 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
详解python3百度指数抓取实例
Dec 12 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 Python
Python Nose框架编写测试用例方法
Oct 26 Python
基于数据归一化以及Python实现方式
Jul 11 Python
Django实现一对多表模型的跨表查询方法
Dec 18 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
五分钟带你搞懂python 迭代器与生成器
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定时执行计划任务的多种方法小结
2011/12/19 PHP
php伪静态之APACHE篇
2014/06/02 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
js实现本地图片文件拖拽效果
2017/07/18 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
js点击时关闭该范围下拉菜单之外的菜单方法
2018/01/11 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现曲线点抽稀算法的示例
2017/10/12 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
Python实现全排列的打印
2018/08/18 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
django settings.py 配置文件及介绍
2019/07/15 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
2015年春节标语口号
2014/12/09 职场文书
护士自我推荐信范文
2015/03/24 职场文书
公司借条范本
2015/05/25 职场文书
推广普通话的宣传语
2015/07/13 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
开网店计划分析
2019/07/30 职场文书
Python 中的Sympy详细使用
2021/08/07 Python
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS