【发布时间】:2025-12-27 22:15:06
【问题描述】:
我在 Atrenta 的面试中被问到一个有趣的问题。这是对复杂度为 O(n) 的数组进行排序,我说这是不可能的,但他坚持认为这是不可能的,即使在面试之后也是如此。
是这样的。
您有一个数组,可以说:[1,0,1,0,1,1,0],这需要排序。必须在数组中完成的事情(在某种意义上不涉及其他数据结构。
我没有,我认为不可能做任何复杂度为 O(n) 的事情。我能想到的最好的是 O(n * log n),我的知识来自*。
如果你知道的话,请给我你的想法和方法。
【问题讨论】:
-
阅读*关于排序的文章的其余部分。
O(n log n)只需要应用于基于 comparison 的排序,而不是例如基数排序。 -
这已在 SO 上被多次询问和回答,例如*.com/questions/7655659/….
-
对数据集的任何约束都可能导致算法的简化。这里,如果数据为0和1,则桶排序为O(n+k),也就是O(n+2),也就是O(n)
-
计数排序也可以。
-
感觉非常可怕和羞愧... :D 你们是对的!所以限制就可以了。