首先将元素分在不同的桶中,在对每个桶中的元素排序
平均复杂度O(n+k)
最坏复杂度O(n^2+k)
空间复杂度O(nk)
def bucket_sort(ls,n=100,max_num=10000):
buckets=[[] for _ in range(n)] #创建桶
for var in ls:
i=min(var//(max_num//n),n-1) #i表示var放在几号桶里
buckets[i].append(var) #把var放在桶中
for j in range(len(buckets)-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_ls=[]
for buc in buckets:
sorted_ls.extend(buc)
return sorted_ls