计数排序
**计数排序(Counting sort)**是一种稳定的线性时间排序算法。计数排序使用一个长度为maxVal - minVal + 1
的额外的数据结构 ,其中第 i 个元素是待排序数组 中值等于 i 的元素个数。然后根据数组 来将 的元素排到正确的位置。
计数排序本质上是一种特殊的桶排序,当桶的个数最大的时候,就是计数排序。
平均时间复杂度:
最好时间复杂度:
最坏时间复杂度:
空间复杂度:
稳定性:稳定
排序方式:非原地(not-in-place)
, 为最大值和最小值的差值。也就是说,当最大值和最小值相差过大,但是数组数量较小时,不应采用计数排序
算法步骤:
找出待排序的数组中最大和最小的元素
统计数组 中每个值为 i 的元素出现的次数,存入数组 的第 i 项
对所有的计数累加(从 中的第一个元素开始,每一项和前一项相加)
反向填充目标数组:将每个元素 i 放在新数组的第 项,每放一个元素就将 减去 1
JavaScript 实现:
最后更新于