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使用pymysql小技巧
Jun 04 Python
python高级特性和高阶函数及使用详解
Oct 17 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
Python对列表的操作知识点详解
Aug 20 Python
python argparser的具体使用
Nov 10 Python
python 实现线程之间的通信示例
Feb 14 Python
python梯度下降算法的实现
Feb 24 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Django用户身份验证完成示例代码
Apr 03 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
对python中arange()和linspace()的区别说明
May 03 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验证码(支持中文)
2007/02/14 PHP
谈谈PHP的输入输出流
2007/02/14 PHP
php cookis创建实现代码
2009/03/16 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php创建多级目录的方法
2015/03/24 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
新闻内页-JS分页
2006/06/07 Javascript
文字幻灯片
2006/06/26 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
js实现iframe动态调整高度的代码
2008/01/06 Javascript
javascript call方法使用说明
2010/01/11 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
javascript类型转换使用方法
2014/02/08 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
2019/10/30 Javascript
原生JS实现天气预报
2020/06/16 Javascript
vuex页面刷新导致数据丢失的解决方案
2020/12/10 Vue.js
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
详解python调用cmd命令三种方法
2019/07/08 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
python实现画图工具
2020/08/27 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
《地震中的父与子》教学反思
2014/04/10 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android