待排序序列:A[n]
排序后的数组:B[n]
记录A中某个数据在表B中的位置:count[n](存的是值为比该数据小的数据的个数)
计数排序算法针对待排序数组中的每个记录,扫描待排序的数组一趟,统计待排序数组中有多少个记录的值比该记录的值小。假设针对某一个记录,统计出的计数值为c,那么,这个记录在新的有序数组中的合适的存放位置即为c。
这样可以看到,每个数据都需要和自己之后的数据进行比较,一直扫到待排数组的尾部,可以得到数组count[n]。这个过程的时间复杂度为o(n^2)
得到count之后的操作为:B[count[i]]=A[i],扫描一遍A数组,得到的B即为排序后的数组。
这个过程的时间复杂度为:o(n).
整个过程的时间复杂度应该为o(N^2).
计数过程的时间复杂度高于计数之后的排序过程。
为什么有说计数排序是线性的说法?计数不花时间了?没理由。