概述
桶排序:
假设输入数据服从均匀分布,平均情况下它的时间代价为O(n)。
桶排序假设输入是由一个随机过程产生,该过程将元素均匀、独立地分布在[0, 1)区间上。
桶排序将[0, 1)区间划分为n个相同大小的子区间,或称为桶(下面的程序中为列表B)。然后,将n个输入数分别放到各个桶中。因为输入数据是均匀独立地分布在[0, 1)区间上,所以一般不会出现很多数落在同一个桶的情况。
为了得到输出结果,我们先对每个桶中的数进行排序,然后遍历每个桶,按照次序把各个桶中的元素列出来即可。
import math
def 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]
最后
以上就是称心哑铃为你收集整理的算法导论程序17-桶排序(Python)的全部内容,希望文章能够帮你解决算法导论程序17-桶排序(Python)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复