十大排序——计数排序
计数排序
基本思想
计数排序是一种线性排序算法,它利用了一个数组,因为数组下标的增长是线性的,所以它就把自己的元素转换成新开辟数组的下标。但是数组元素有正有负,下标只有非负值,那么我们就应该考虑如何转换。这也不是很难,只要我们将该元素值减去数组最小值即可得到count数组的下标(类似映射函数)。
例子
用数组元素减去数组最小值即可得到在count数组的下标。count数组中用橙色框住的表示待排序数组转换后的元素不存在。同时,可以观察到count数组的大小是max-min+1=8+6+1=15.
将count中对应原数组的元素放回数组即可
实现代码
1 | void CountSort(List &L) |
算法复杂度
计数排序是一种非基于比较的排序算法,其空间复杂度和时间复杂度均为 O(n+k),其中 k 是整数的范围。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Conzxy's blog!
评论