📜  计数排序算法(1)

📅  最后修改于: 2023-12-03 14:57:26.178000             🧑  作者: Mango

计数排序算法介绍

计数排序(Counting sort)是一种线性时间复杂度的排序算法,其核心思想是借助额外的辅助空间,通过计算每个元素出现的次数,将待排序的数据分配到有序的桶中,再依次收集桶中的数据即可得到有序序列。

算法流程
  1. 找出待排序的数组中最大和最小的元素;
  2. 统计数组中每个值为 i 的元素出现的次数,存入数组 C 的第 i 项;
  3. 对所有的计数累加(从 C[0] 开始,每一项和前一项相加);
  4. 反向填充目标数组:将每个元素 i 放在新数组的第 C[i] 项,每放一个元素就将 C[i] 减去 1。
复杂度分析
  • 时间复杂度:O(n + k),其中 n 是待排序元素的个数,k 是非负整数的范围,即数据范围;
  • 空间复杂度:O(n + k),需要额外使用与数据规模相当的辅助空间。
程序示例

下面是 Python 实现计数排序的示例程序:

def counting_sort(nums):
    max_num, min_num = max(nums), min(nums)
    count = [0] * (max_num - min_num + 1)

    for num in nums:
        count[num - min_num] += 1

    for i in range(1, len(count)):
        count[i] += count[i - 1]

    res = [0] * len(nums)
    for num in nums[::-1]:
        res[count[num - min_num] - 1] = num
        count[num - min_num] -= 1

    return res

需要注意的是,计数排序需要知道待排序数组的最大值和最小值,因此在编写代码时要对输入的数据进行判断和处理。