Python算法与数据结构——桶排序
桶排序(Bucket Sort)
桶排序:首先将元素分在不同的桶中,再对每个桶中的元素排序。
桶排序的表现取决于数据的分布,也就是需要对不同数据排序时采取不同的分桶策略
- 平均情况时间复杂度: O ( n + k ) O(n+k) O(n+k)
- 最坏情况时间复杂度: O ( n 2 k ) O(n^2k) O(n2k)
- 空间复杂度: O ( n k ) O(nk) O(nk)
# 桶排序代码
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, 100) for i in range(1000)]
print(li)
li = bucket_sort(li)
print(li)