本文为原创文章,未经本人允许,禁止转载。转载请注明出处。
1.计数排序
作为一种线性时间复杂度的排序,计数排序(Counting sort)要求输入的数据必须是有确定范围的整数。
算法的步骤如下:
- 找出待排序的数组中最大和最小的元素。
- 统计数组中每个值为$i$的元素出现的次数,存入数组$C$的第$i$项。
- 对所有的计数累加(从$C$中的第一个元素开始,每一项和前一项相加)。
- 反向填充目标数组:将每个元素$i$放在新数组的第$C[i]$项,每放一个元素就将$C[i]$减去1。
算法动态演示:🔗链接。
假设待排序列见下:
构建数组$C$,其长度为待排序列最大元素+1:
将待排序列中的每个元素按照其索引放入数组$C$中:
执行算法第三步,对数组$C$所有的计数累加:
从待排序列的最后一个元素开始,将数组$C$上以其为索引的计数值减1,得到新的索引,为该元素在最终结果中的位置: