pygorithm/sort/bucket_sort.py

35 lines
1.3 KiB
Python
Raw Permalink Normal View History

2023-12-11 18:17:16 +08:00
"""
桶排序通过设置一些具有大小顺序的桶每个桶对应一个数据范围将数据平均分配到各个桶中然后在每个桶内部分别执行排序
最终按照桶的顺序将所有数据合并
前述几种排序算法都属于基于比较的排序算法它们通过比较元素间的大小来实现排序
此类排序算法的时间复杂度无法超越 O(nlog2n)
考虑一个长度为 n 的数组其元素是范围 [0, 1) 内的浮点数:
1. 初始化 k个桶 n 个元素分配到 k 个桶中
2. 对每个桶分别执行排序这里采用编程语言的内置排序函数
3. 按照桶从小到大的顺序合并结果
"""
def bucket_sort(nums: list[int]):
# 初始化 k = n / 2 个桶预期向每个桶分配2个元素
k = len(nums) // 2
buckets = [[] for _ in range(k)]
# 1. 将数组元素分配到对应的桶中
for num in nums:
# 输入数据范围为 [0, 1),所以使用 num*k 可将 num*k 映射到范围[0, k-1]
i = int(num * k)
buckets[i].append(num)
for bucket in buckets:
# 对各个桶内的数排序
bucket.sort()
i = 0
for bucket in buckets:
for num in bucket:
nums[i] = num
i += 1