思路
将元素分布在不同的桶中,然后分别对桶中的元素排序
时间复杂度
最坏情况:O(n^2 + k)
平均情况:O(n + k)
空间复杂度
O(nk)
代码示例
"""桶排序
将元素分布在不同的桶中,然后分别对桶中的元素排序
时间复杂度:
最坏情况:O(n^2 + k)
平均情况:O(n + k)
空间复杂度:O(nk)
"""
import random
def bucket_sort(ls, n=10, max_count=100):
"""桶排序(基于计数排序)
桶排序的表现取决于数据的分布。
Args:
:param ls: list, 待排序的列表
:param n: int, 桶的数量
:param max_count: int, 列表中数最大的范围
"""
buckets = [[] for _ in range(n)]
for item in ls:
pos = min(item // (max_count // n), n - 1)
buckets[pos].append(item)
for ind, buc in enumerate(buckets, start=0):
buckets[ind] = sorted(buc)
ls.clear()
for buc in buckets:
for item in buc:
ls.append(item)
ls = [random.randint(0, 100) for _ in range(1000)]
random.shuffle(ls)
bucket_sort(ls)
print(ls)