计数排序

概述

计数排序(Counting Sort) 是一种非比较排序算法,假设输入的 个元素都是 到 之间的整数,通过计数每个值出现的次数来确定元素位置,时间复杂度为 ,且是稳定的排序算法。

定义

计数排序

计数排序假设输入数组 中每个元素是 到 之间的整数。

算法步骤:

  1. 初始化计数数组 为全零。
  2. 遍历 ,统计每个值出现的次数存入 。
  3. 对 做前缀和,使得 等于 的元素个数。
  4. 从后向前遍历 ,利用 确定每个元素在输出数组 中的位置,并将 中对应值减 1。

时间复杂度: 空间复杂度:(需要输出数组和计数数组)

核心性质

稳定性

计数排序是稳定的排序算法。从后向前遍历输入数组保证了相等元素的相对顺序不变。这一性质使得计数排序可以作为 基数排序 的子程序。

适用条件

  • 输入元素必须是整数(或可以映射为整数)。
  • 当 时,计数排序的运行时间为 ,非常高效。
  • 当 时,计数排序效率较低,不适合使用。

非比较排序

计数排序不通过元素间的比较来确定顺序,因此不受 比较排序 的 下界限制。

章节扩展

第8章:基数排序

计数排序是基数排序中按位排序的子程序,基数排序利用计数排序的稳定性来实现多关键字排序。

参见