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中threading超线程用法实例分析
May 16 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Python面向对象之反射/自省机制实例分析
Aug 24 Python
django项目搭建与Session使用详解
Oct 10 Python
django 自定义过滤器的实现
Feb 26 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Django如何实现上传图片功能
Aug 16 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
python实现会员管理系统
Mar 18 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代码的53条建议
2008/03/27 PHP
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
19个Android常用工具类汇总
2014/12/30 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
如何防止JavaScript自动插入分号
2015/11/05 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
MockJs结合json-server模拟后台数据
2020/08/26 Javascript
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
windows下python安装小白入门教程
2018/09/18 Python
使用Scrapy爬取动态数据
2018/10/21 Python
python实现字典嵌套列表取值
2019/12/16 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
Python学习笔记之装饰器
2020/08/06 Python
.NET remoting中对象激活的两种方式
2015/06/08 面试题
Linux常见面试题
2013/03/18 面试题
综合实践活动方案
2014/02/14 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
事业单位鉴定材料
2014/05/25 职场文书
当幸福来敲门英文观后感
2015/06/01 职场文书
在职证明书模板
2015/06/15 职场文书
优质护理心得体会
2016/01/22 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书