-
首先将元素分在不同的捅中,再对每个同种的元素排序
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) # 把var加到桶里
# 保持桶内的顺序
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
# 测试
import random
li = [random.randint(0,10000)for i in range(100000)]
# print(li)
li = bucket_sort(li)
print(li)
-
桶排序的表现取决去数据的分布,也就是说需要对不同的数据排序时采取不同的分桶策略
-
平均情况的时间复杂度:O(n+k)
-
最坏情况的时间复杂度:O(n2k)
-
空间复杂度: O(nk)