--- 桶排序 --- 先将元素分在不同的桶中,再对每个桶中的元素排序 效率取决于数据分布,对不同数据排序时,需要采取不同的分桶策略
def bucket_sort(li, n=100, max_num=10000):
# 创建桶
buckets = [[] for _ in range(n)]
for val in li:
# i 表示 val 放到几号桶
i = min(val // (max_num // n), n - 1)
buckets[i].append(val)
# 插入排序,保持桶内有序
for j in range(len(buckets[i]) - 1, 0, -1):
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