桶排序
基本思想:
基本思想很简单,如果有一个数组A,包含N个整数,值从1到M,桶排序(BucketSort)。留置一个数组S,里面含有M个桶,初始化为0。然后遍历数组A,读入Ai时,S[Ai]增一。所有输入被读进后,扫描数组S得出排好序的表。该算法时间花费O(M+N),空间上不能原地排序。
'''
Creat by HuangDandan
2018-08-19
[email protected]
桶排序
桶排序也叫计数排序,将数据集里面所有元素按顺序列举出来,然后统计元素出现的次数。最后按顺序输出数据集里面的元素。
但是桶排序非常浪费空间, 比如需要排序的范围在0~10000000之间, 需要排序的数是[3,9,4,10000000], 同样需要10000000-3+1个空间
注意: 桶排序不能排序小数
代码实现注意点:
1-如何将桶中的计数转换成原列表中的元素返回
'''
def BucketSort(Lst):
Bucket = [0]*(max(Lst)- min(Lst) +1) #创建并初始化桶
for i in range(len(Lst)): #把所有的元素放入桶中,即把对应的元素+1
Bucket[Lst[i]-min(Lst)] += 1
temp = []
for i in range(len(Bucket)): #取出桶中的元素
if Bucket[i] != 0:
temp += [min(Lst) + i] * Bucket[i]
# for i in range(len(Bucket)): #取出桶中的元素
# while Bucket[i] != 0:
# temp.append(min(Lst)+i)
# Bucket[i] -= 1
return temp
if __name__ == "__main__":
Lst1 = [1,4,5,2,55,44,66,77,66,66,88,1]
print(Lst1)
print(BucketSort(Lst1))
print('------------------------------------')
参考博客:
https://www.jb51.net/article/123676.htm
https://blog.csdn.net/iqqiqqiqqiqq/article/details/54837711