思想:
划分多个范围相同的区间,每个子区间自排序,最后合并。
桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。
桶排序需要尽量保证元素分散均匀,否则当所有数据集中在同一个桶中时,桶排序失效
def bucket_sort(li,n=100,max_num=10000):
buckets = [[] for _ in range(n)] # 创建桶
for var in li:
i = min(var//(max_num//n),n-1) # i表示var放到几号桶
buckets[i].append(var) # 把bar加到规定的桶里面
for j in range(len(buckets[i])-1,0,-1): # 保持第i桶内的顺序
if buckets[i][j] < buckets[i][j-1]:
buckets[i][j],buckets[i][j-1] = buckets[i][j-1],buckets[i][j]
else:
break
sorted_li= []
for buc in buckets:
sorted_li.extend(buc)
return sorted_li
import random
li = [random.randint(0, 100) for i in range(1000)]
li = bucket_sort(li)
print(li)