是否有O(n)整数排序算法?

时间:2010-02-28 19:27:32

标签: algorithm language-agnostic sorting time-complexity

上周我偶然发现了作者在第二页提到的this paper

  

请注意,这会产生整数边权重的线性运行时间。

第三页上的内容相同:

  

这产生了整数边权重的线性运行时间和基于比较的排序的O(m log n)。

在第8页:

  

特别是,使用快速整数排序可能会显着加速GPA。

这是否意味着在特殊情况下对于整数值存在O(n)排序算法?或者这是图论的专长?

PS:
可能参考文献[3]可能会有所帮助,因为在第一页上他们说:

  

[...]图表类已经实现了进一步的改进,例如整数边权重[3],[...]

但我无法访问任何科学期刊。

6 个答案:

答案 0 :(得分:56)

是的,基数排序和计数排序为O(N)。它们不是基于比较的排序,已被证明具有Ω(N log N)下限。

确切地说,基数排序为O(kN),其中k是要排序的值中的位数。计数排序为O(N + k),其中k是要排序的数字的范围。

k足够小的特定应用中,基数排序和计数排序在实践中表现出线性时间性能。

答案 1 :(得分:12)

比较分类平均必须至少为Ω(n log n)。

但是,counting sortradix sort与输入大小呈线性关系 - 因为它们不是比较排序,它们利用输入的固定结构。

答案 2 :(得分:5)

计算排序:http://en.wikipedia.org/wiki/Counting_sort如果你的整数相当小。 如果您有更大的数字,则进行基数排序(这基本上是计数排序的概括,或者如果您愿意,可以对更大数字进行优化):http://en.wikipedia.org/wiki/Radix_sort

还有一个分类:http://en.wikipedia.org/wiki/Bucket_sort

答案 3 :(得分:2)

虽然不太实用(主要是由于大量的内存开销),我想我会提到Abacus (Bead) Sort作为另一个有趣的线性时间排序算法。

答案 4 :(得分:1)

这些基于硬件的排序算法:

A Comparison-Free Sorting Algorithm
Sorting Binary Numbers in Hardware - A Novel Algorithm and its Implementation

Laser Domino Sorting Algorithm - 我根据Counting排序进行的一项思考实验,旨在实现O(n)时间复杂度超过Counting Sort的O(n + k)

答案 5 :(得分:0)

添加更多细节 - 实际上,迄今为止最好的排序算法不是O(n),而是0(n \ sqrt {\ log \ log n})。

您可以在论文中查看有关此算法的更多详细信息: http://dl.acm.org/citation.cfm?id=652131