算法导论程序17-桶排序(Python)
来源:互联网 发布:2007-2008网络流行歌曲 编辑:程序博客网 时间:2024/06/02 02:17
桶排序:
假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。
桶排序假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0, 1)区间上。
桶排序将[0, 1)区间划分为n个相同大小的子区间,或称为桶(下面的程序中为列表B)。然后,将n个输入数分别放到各个桶中。因为输入数据是均匀独立地分布在[0, 1)区间上,所以一般不会出现很多数落在同一个桶的情况。
为了得到输出结果,我们先对每个桶中的数进行排序,然后遍历每个桶,按照次序把各个桶中的元素列出来即可。
import mathdef bucket_sort(A): n = len(A) B = [[] for i in range(n)] for i in range(0,n): B[math.floor(n*A[i])].append(A[i]) for i in range(0,n): insertion_sort(B[i]) del A[:] for each in B: A.extend(each)def insertion_sort(A): for j in range(1,len(A)): key = A[j] #Insert A[j] into the sorted sequence A[0..j-1]. i = j-1 while i>=0 and A[i]>key: A[i+1] = A[i] i = i-1 A[i+1] = key
运行结果:
>>> A=[0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68]>>> bucket_sort(A)>>> A[0.12, 0.17, 0.21, 0.23, 0.26, 0.39, 0.68, 0.72, 0.78, 0.94]
阅读全文
0 0
- 算法导论程序17-桶排序(Python)
- 算法导论程序11--堆排序算法(Python)
- 算法导论程序1--插入排序(Python+Java)
- 算法导论程序2--归并排序(Python)
- 算法导论程序13-快速排序的描述(Python)
- 算法导论程序15-计数排序(Python)
- 算法导论程序8--堆(Python)
- 算法导论程序16--基数排序(Python)
- 算法导论程序21--链表(Python)
- 算法导论程序14-快速排序的随机化版本(Python)
- 【算法导论】桶排序
- 算法导论 桶排序
- 算法导论桶排序
- 算法导论程序6--随机算法(Python)
- 算法导论插入排序算法python实现
- 算法导论合并排序算法python实现
- 算法导论程序3--最大子数组问题(Python)
- 算法导论程序5--雇佣问题(Python)
- Python datetime数据类型
- mac上svn出现SSL错误的解决方式
- 堆排序
- Ecelipse 显示内存使用情况
- Android填坑之旅(第九篇)代码审查关注什么:性能
- 算法导论程序17-桶排序(Python)
- java 获取前一天的数据
- Linux运维笔记-文档总结-高级网络设置(team,网桥,IPV6)
- MATLAB如何判断是否为多波段影像?
- MES面试问题整理
- JS 判断用户是安卓手机还是IOS手机
- PLC实验七(装配流水线控制的模拟)
- isset,is_null和empty使用上的区别
- 读书笔记--建造者模式