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简单进程锁代码实例
Apr 27 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
Tornado 多进程实现分析详解
Jan 12 Python
python实现逐个读取txt字符并修改
Dec 24 Python
Python设计模式之外观模式实例详解
Jan 17 Python
详解Python:面向对象编程
Apr 10 Python
python 判断文件还是文件夹的简单实例
Jun 10 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
django-allauth入门学习和使用详解
Jul 03 Python
python 字段拆分详解
Dec 17 Python
python实现无边框进度条的实例代码
Dec 30 Python
python爬虫之爬取笔趣阁小说
Apr 22 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/01/13 PHP
PHP获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
百度地图API使用方法详解
2015/08/25 PHP
php session的锁和并发
2016/01/22 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
激活 ActiveX 控件
2006/10/09 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
2015/10/01 Javascript
node.js require() 源码解读
2015/12/13 Javascript
学习javascript面向对象 理解javascript对象
2016/01/04 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
基于vue-video-player自定义播放器的方法
2018/03/21 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
JS实现移动端可折叠导航菜单(现代都市风)
2020/07/07 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
python的多重继承的理解
2017/08/06 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
Sanic框架配置操作分析
2018/07/17 Python
python 自动去除空行的实例
2018/07/24 Python
python实现程序重启和系统重启方式
2020/04/16 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
2014年公司庆元旦活动方案
2014/03/05 职场文书
爱护花草树木的标语
2014/06/11 职场文书
乡镇保密工作责任书
2014/07/28 职场文书