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之玩转字符串(1)
Sep 14 Python
Python批量修改文本文件内容的方法
Apr 29 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
对python抓取需要登录网站数据的方法详解
May 21 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
Python测试模块doctest使用解析
Aug 10 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
Keras SGD 随机梯度下降优化器参数设置方式
Jun 19 Python
基于Python和C++实现删除链表的节点
Jul 06 Python
python3中celery异步框架简单使用+守护进程方式启动
Jan 20 Python
Python爬取网站图片并保存的实现示例
Feb 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学习的路线图
2013/07/10 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
2014/11/24 PHP
php支付宝接口用法分析
2015/01/04 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
PHP迭代器和迭代的实现与使用方法分析
2018/04/19 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
jQuery的图片滑块焦点图插件整理推荐
2014/12/07 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
巧用canvas
2017/01/21 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
Python中文编码知识点
2019/02/18 Python
Python中format()格式输出全解
2019/04/12 Python
django将数组传递给前台模板的方法
2019/08/06 Python
python3 mmh3安装及使用方法
2019/10/09 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
店长职务说明书
2014/02/04 职场文书
opencv读取视频并保存图像的方法
2021/06/04 Python
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL