桶排序(bucket sort)是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶,每个桶对应一个数据范围,将数据平均分配到各个桶中;然后,在每个桶内部分别执行排序;最终按照桶的顺序将所有数据合并。
def bucket_sort(nums: list[float]):"""桶排序"""# 初始化 k = n/2 个桶,预期向每个桶分配 2 个元素k = len(nums) // 2buckets = [[] for _ in range(k)]# 1. 将数组元素分配到各个桶中for num in nums:# 输入数据范围为 [0, 1),使用 num * k 映射到索引范围 [0, k-1]i = int(num * k)# 将 num 添加进桶 ibuckets[i].append(num)# 2. 对各个桶执行排序for bucket in buckets:# 使用内置排序函数,也可以替换成其他排序算法bucket.sort()# 3. 遍历桶合并结果i = 0for bucket in buckets:for num in bucket:nums[i] = numi += 1