线性排序 — 计数排序
来自同学家铭的分享,整理下作为自己的笔记。
- 算法的步骤如下:
- 找出待排序的数组中最大和最小的元素
- 将数组中值为i的元素出现的次数存入数组C的第i项
- 对所有的计数累加
- C[i] += C[i-1];
- 反向填充目标数组
- 将元素i放在新数组的第C[i]项,每放一个就将C[i]减去1
- 效果图:
- 时间复杂度
- 当输入是n个[0,k]之间的整数时
- 时间复杂度为 Θ(n + k)。
- 计数排序不基于比较,
- 排序的速度快于任何比较排序算法。
- 局限性
- 在排序前需要知道数据的最大最小值
- 对于数据范围很大的数组,需要大量的时间和内存
- 桶排序
- 基数排序
- 注意点:如果想从高位到低位来进行调整,没次都要需要考虑上一位是否需要调整,会很麻烦,不如从低位来的简单