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的类变量和成员变量用法实例教程
Aug 25 Python
在Gnumeric下使用Python脚本操作表格的教程
Apr 14 Python
python分析网页上所有超链接的方法
May 08 Python
Python functools模块学习总结
May 09 Python
Python实现多线程抓取妹子图
Aug 08 Python
Python实现矩阵转置的方法分析
Nov 24 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
python发送告警邮件脚本
Sep 17 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 Python
Python 统计序列中元素的出现频度
Apr 26 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的单引号和双引号 字符串效率
2009/05/27 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
js或css实现滚动广告的几种方案
2010/01/28 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
JS简单获取当前日期和农历日期的方法
2017/04/17 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
浅谈Vuex@2.3.0 中的 state 支持函数申明
2017/11/22 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
python实现简易动态时钟
2018/11/19 Python
python创建n行m列数组示例
2019/12/02 Python
Python守护进程实现过程详解
2020/02/10 Python
如何基于python实现不邻接植花
2020/05/01 Python
GNC健安喜官方海外旗舰店:美国著名保健品牌
2017/01/04 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
裁员通知
2015/04/25 职场文书
python字符串的多行输出的实例详解
2021/06/08 Python
JS前端可视化canvas动画原理及其推导实现
2022/08/05 Javascript