关于计数排序

来源:互联网 发布:versions for mac闪退 编辑:程序博客网 时间:2024/06/06 16:25

待排序序列: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).

计数过程的时间复杂度高于计数之后的排序过程。

为什么有说计数排序是线性的说法?计数不花时间了?没理由。