Python实现的基数排序算法原理与用法实例分析
作者:Alex Yu 发布时间:2023-11-11 10:15:12
标签:Python,基数排序,算法
本文实例讲述了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程序设计有所帮助。
来源:http://www.cnblogs.com/biaoyu/p/4831648.html


猜你喜欢
- 爬取 * 及测试是否可用很多人在爬虫时为了防止被封IP,所以就会去各大网站上查找免费的 * ,由于不是每个IP地址都是有效的,如果要进去
- 当你准备全面进军web标准时,有时候你是不是被表格的弄得焦头烂额呢?比如,原来使用“非法”的nobr现在要用什么来代替呢?今天,就让我来一个
- 如何生成斐波那契數列斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计
- 四大前缀除了普通的字符串,python在字符串前面可以有4个前缀,即frub。其中,f字符串可将{}中的变量转为字符串;r表示取消转义;u表
- 首先确保已安装jupyter notebook,而且添加到了环境变量再找到保存ipynb文件的文件夹,在路径处直接输入cmd,然后回车进入命
- 过滤器模板层对变量的操作实际还有很多,过滤器就是其中一种。学过Linux系统的一定知道管道操作符,其可以将上一步输出直接作为下一步输入进行处
- 迭代器模式迭代器模式(Iterator Pattern)是一种常用的设计模式,用于遍历集合中的元素,不暴露集合的内部结构。迭代器模式将集合和
- 分析我们将添加、插入、删除定义为:添加 : 在字符串的后面或者前面添加字符或者字符串插入 : 在字符串之间插入特定字符在Python中,字符
- 在mysql中limit可以实现快速分页,但是如果数据到了几百万时我们的limit必须优化才能有效的合理的实现分页了,否则可能卡死你的服务器
- <!--#include file="admin_Checkuser.asp"--> <%
- 前言我在使用mac安装virtualwrapper的时候遇到了问题,搞了好长时间,才弄好,在这里总结一下分享出来,供遇到相同的问题的朋友使用
- 一、什么是跨域?跨域问题的出现是因为浏览器的同源策略问题。所谓同源就是必须有以下三个相同点:协议相同、主机相同、端口相同。如果其中有一项不同
- 熬了半个通宵,写出了自己的Google SiteMap文件,在这里给出详细编写教程,愿对大家有所帮助。Google SiteMap的作用及协
- 本来想把这个页面用jade渲染出来、评论部分用vue,但是想了想觉得麻烦,最后还是整个用vue的组件搞定他吧。 先上在线demo:http:
- 本文实例为大家分享了检测几何图形轮廓和检测花朵图形轮廓,供大家参考,具体内容如下OpenCV绘制图像轮廓绘制轮廓的一般步骤:1、读取图像im
- 重置MySQL中表中自增列的初始值的实现方法1. 问题的提出 在MySQL的数据库设计中,一般都会设计自增的数字列,
- 前言可能很多小伙伴会因为pycharm全是英文而烦恼吧,本博主呢也是一个英语刚过四级的小白,深知大家的难处,所以会奉上最详细的修改中文的教程
- 前言在Selenium自动化测试过程中会遇到定位浏览器弹窗的情况,根据弹窗实现原理不同大致可分为以下几种定位方式。1. alert
- 作者:Jim Ley(主页)译者:Sheneyan(子乌)时间:2006.1.29英文原文:http://jibbering.com/200
- javascript中一个标识符所在的位置越深,它的读写速度也越慢。因此,函数中读写局部变量总是最快的,而读写全局变量通常是最慢的。一个好的