桶排序
有一个数组array 对数组array 中的数按照一定的范围分为几类,将每一类放入桶中,再对每一个桶中的数字进行排序,最后将其合并得到有序数组
代码和解释如下
# bucket_sort 代码实现
from typing import List
def bucket_sort(arr:List[int]):
"""桶排序"""
min_num = min(arr)
max_num = max(arr)
# 桶的大小
bucket_range = (max_num-min_num) / len(arr) # 数组中数的分类方式
# 桶数组
count_list = [ [] for i in range(len(arr) + 1)]
# 向桶数组填数
for i in arr:
count_list[int((i-min_num)//bucket_range)].append(i)
arr.clear()
# print(count_list) # [[7], [], [26, 25], [], [48], [57], [63], [73, 70], [], [92], [93]]
# 回填,这里桶内部排序直接调用了sorted
for i in count_list:
for j in sorted(i):
arr.append(j)
if __name__ == '__main__':
print(bucket_sort([73, 93, 48, 26, 92, 25, 7, 63, 70, 57]))