【算法基础】【排序】计数排序

计数排序

Posted by x-jeff on July 8, 2021

本文为原创文章,未经本人允许,禁止转载。转载请注明出处。

1.计数排序

作为一种线性时间复杂度的排序,计数排序(Counting sort)要求输入的数据必须是有确定范围的整数。

算法的步骤如下:

  1. 找出待排序的数组中最大和最小的元素。
  2. 统计数组中每个值为$i$的元素出现的次数,存入数组$C$的第$i$项。
  3. 对所有的计数累加(从$C$中的第一个元素开始,每一项和前一项相加)。
  4. 反向填充目标数组:将每个元素$i$放在新数组的第$C[i]$项,每放一个元素就将$C[i]$减去1。

算法动态演示:🔗链接

假设待排序列见下:

构建数组$C$,其长度为待排序列最大元素+1:

将待排序列中的每个元素按照其索引放入数组$C$中:

执行算法第三步,对数组$C$所有的计数累加:

从待排序列的最后一个元素开始,将数组$C$上以其为索引的计数值减1,得到新的索引,为该元素在最终结果中的位置:

2.代码地址

  1. 计数排序

3.参考资料

  1. 1.8 计数排序(计数排序)
  2. 排序算法的c++实现——计数排序