📅  最后修改于: 2023-12-03 15:27:12.209000             🧑  作者: Mango
计数排序是一种非比较性排序算法,可以用于对正整数进行排序。计数排序的时间复杂度为O(n+k),其中n为待排序数组的长度,k为数列中最大元素与最小元素的差值。
def counting_sort(array):
# 找出数组中最大值max和最小值min
max_value, min_value = max(array), min(array)
# 初始化元素计数列表count和输出列表output
count = [0] * (max_value - min_value + 1)
output = [0] * len(array)
# 统计各个元素出现的个数,得到元素计数列表count
for i in array:
count[i - min_value] += 1
# 计算元素计数列表的前缀和cumulative_sum
cumulative_sum = [0] * len(count)
cumulative_sum[0] = count[0]
for i in range(1, len(count)):
cumulative_sum[i] = cumulative_sum[i-1] + count[i]
# 倒序遍历待排序数组,将元素根据元素计数列表和前缀和列表中的值,放入输出列表output中
for i in reversed(array):
output[cumulative_sum[i-min_value]-1] = i
count[i-min_value] -= 1
return output
array = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_array = counting_sort(array)
print(sorted_array)
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]