计数排序-不基于比较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.当数列元素不是整数时,并不适用于计数排序

无法形成空间。

//这个是基序排序的基础。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/14044130.html