算法导论之js实现--计数排序
更新日期:
计数排序的javascript实现。
计数排序
排序问题
- 输入:n个数的一个序列
<a1, a2, ..., an>
- 输出:输入序列的一个排列
<a1', a2', ..., an'>
,满足a1' <= a2' <= ... <= an'
计数排序
计数排序(Counting sort)是一种稳定的线性时间排序算法。
计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。
当输入的元素是n个0到k之间的整数时,它的运行时间是Θ(n + k)
。计数排序不是比较排序,排序的速度快于任何比较排序算法。
由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存。
思路
- 找出待排序的数组中最大和最小的元素。
- 统计数组中每个值为
i
的元素出现的次数,存入数组C
的第i
项。 - 对所有的计数累加(从
C
中的第一个元素开始,每一项和前一项相加)。 - 反向填充目标数组:将每个元素
i
放在新数组的第C(i)
项,每放一个元素就将C(i)
减去1。
js基本思路实现
这里我们先使用两个数组分别保存“基准”左边、右边的子集。
1 | function countingSort(iArr, max) { |
验证
1 | countingSort([5, 2, 4, 6, 1, 3], 6); |
码生艰难,写文不易,给我家猪囤点猫粮了喵~
查看Github有更多内容噢:https://github.com/godbasin
更欢迎来被删的前端游乐场边撸猫边学前端噢
如果你想要关注日常生活中的我,欢迎关注“牧羊的猪”公众号噢