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 open()文件处理使用介绍
Nov 30 Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 Python
Python中的ConfigParser模块使用详解
May 04 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
解读python logging模块的使用方法
Apr 17 Python
django 删除数据库表后重新同步的方法
May 27 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
python3实现高效的端口扫描
Aug 31 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 Python
win10+anaconda安装yolov5的方法及问题解决方案
Apr 29 Python
Python利用机器学习算法实现垃圾邮件的识别
Jun 28 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
main.php
2006/12/09 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
php获取数组元素中头一个数组元素值的实现方法
2014/12/20 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
php实现的单一入口应用程序实例分析
2015/09/23 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
利用jQuery操作对象数组的实现代码
2011/04/27 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Vue核心概念Getter的使用方法
2019/01/18 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
Python中的tuple元组详细介绍
2015/02/02 Python
python3中str(字符串)的使用教程
2017/03/23 Python
python中requests和https使用简单示例
2018/01/18 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
简单的命令查看安装的python版本号
2020/08/28 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
行政部主管岗位职责
2013/12/28 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
学校搬迁方案
2014/06/15 职场文书
演讲比赛通讯稿
2015/07/18 职场文书