是否有可用的排序算法,其时间复杂度为O(N)?

时间:2014-10-28 05:43:21

标签: algorithm sorting

大多数排序算法都具有O(N N)或O(N logN)的复杂度来实现结果。但是,有些算法的复杂度为O(N)具体的输入集。我想知道在所有情况下是否有可用的复杂度为O(N)的排序算法。

3 个答案:

答案 0 :(得分:5)

如果你只能比较(检查两个项目是<,>,==)正在排序的值,那么你不能做得比O(n log(n))更好。它是少数几种经过验证的算法下界之一。证明不是太复杂(详情请查看维基百科上的比较排序),但它足够长,不能在此重复。

如果你可以做比较以外的事情你有更多的灵活性。如果你有数字,你可以检查存储桶排序(一种基数排序),它可以进行O(n)排序。

答案 1 :(得分:1)

没有。最快的通用排序算法都是O(nlgn)。实际上是Θ(nlgn),因为从数学上证明了基于比较的排序算法不能再有效了。

这是我在基于比较的排序算法中发现的一篇论文,它解释了它。 http://www.cs.cmu.edu/~avrim/451f11/lectures/lect0913.pdf

答案 2 :(得分:1)

简短的回答是否定的。

如果输入数组的每个元素属于有限集,则可以使用O(N)算法。比如说,如果输入总是在有限集[0..9]内。然后,您可以创建一个大小为10的数组,扫描数组并递增相应的索引。

因此,O(N)排序算法在所有情况下才有可能只有在内存是无限的情况下才有可能。