📜  用于计数排序的Python程序(1)

📅  最后修改于: 2023-12-03 15:27:12.209000             🧑  作者: Mango

用于计数排序的Python程序

计数排序是一种非比较性排序算法,可以用于对正整数进行排序。计数排序的时间复杂度为O(n+k),其中n为待排序数组的长度,k为数列中最大元素与最小元素的差值。

算法流程
  1. 找出待排序数组中的最大值max和最小值min。
  2. 统计各个元素出现的个数,得到一个元素计数列表count,其中count[i]表示待排序列表中值等于i的元素个数。
  3. 计算元素计数列表的前缀和cumulative_sum,其中cumulative_sum[i]表示count[0]到count[i]总和。
  4. 倒序遍历待排序列表,将每个元素根据元素计数列表和前缀和列表中的值,放入输出列表output中。同时将元素计数列表中对应元素个数减一。
代码实现
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]