2016-02-29 104 views
0

是否有O(n)算法来重新排列保存顺序的奇数和偶数?辅助数组可以用于中间结果,但重排应该在数组内完成。重新排列奇数和偶数

我发现这个http://www.geeksforgeeks.org/segregate-even-and-odd-numbers/做需要什么,但它并没有维持秩序

Input: 
1 4 3 8 6 5 7 

Output: 
1 3 5 7 4 8 6 
+0

是总是排序的输入?如果不是这样,那么它就无法完成O(n) –

+0

你为什么问“*有没有... *”?你知道有吗?你需要一个吗? – Amit

+0

数字序列是否是任意的?如果是这样,那么在你的例子中反映出来,因为你的方式让读者感到困惑。 –

回答

1

这个怎么样?

  1. 创建两个双向链表(或具有O(1)级联的东西)来分别存储奇数和偶数。
  2. 迭代输入列表,将它们分隔到第1步中的列表。
  3. 连接两个列表。
+0

第3步应该是“从列表内容中填充数组”。但真正的链表是一个痛苦的工作,如果你不必... – Amit

+0

@Amit,我想这取决于;我发现链接的数据结构更容易推理。它也依赖于编程语言,像Haskell这样的纯粹的函数式语言可能会支持链接列表而不是数组。 – utdemir

+0

我认为这个问题是关于数组(输入和输出)的,但实际上并没有提及任何有关它的内容。它确实说(现在编辑后)没有辅助数组,所以我想这意味着你的答案也是无效的。但是,通过链接列表,您不需要任何辅助结构,只需将项目移动到正确的位置即可。它是* O(n)*。 – Amit