计数排序-不基于比较O(n)
转自:https://www.cnblogs.com/kyoner/p/10604781.html
1.基本过程
计数排序,这种排序算法不是基于元素比较,而是利用数组下标来确定元素的正确位置。
建立数组A,按照待排序数组的值B,根据每个B值对应A的下标++。有了这个统计结果,排序就很简单了,直接遍历数组,输出数组元素的下标值,元素的值是几,就输出几次。
它适用于一定范围的整数排序。在取值范围不是很大的情况下,它的性能在某些情况甚至快过那些O(nlogn)的排序,例如快速排序、归并排序。
使用max-min,可以确保范围,如果有重复的数据元素,就累加,统计数组每个值表示的是对应值重新排序后的下标位置。
2.复杂度
如果原始数列的规模是N,最大最小整数的差值是M,时间复杂度是O(N+M)。和它的具体过程有关,首先遍历N统计次数,后来遍历M反向填充。
如果不考虑结果数组,只考虑统计数组的话,空间复杂度是O(M)。
3.局限性
1.当数列最大最小值差距过大时,并不适用于计数排序
会导致空间的浪费
2.当数列元素不是整数时,并不适用于计数排序
无法形成空间。
//这个是基序排序的基础。