算法导论程序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]


原创粉丝点击