algorithm – 就地对具有2个已排序子数组的数组进行排序

[这是一个面试问题.我找不到重复的内容.]

数组包含两个子排序数组.给出一个inplace算法来排序两个子数组.

例如:I / P:1 4 5 7 8 9 2 3 6 10 11
O / P:1 2 3 4 5 6 7 8 9 10 11

我认为在就地合并排序,插入排序(因为子数组已经排序)和快速排序方面,但无法想到一个比使用标准排序方法更复杂的解决方案.

请帮我找一个算法,它允许我们利用排序的子数组属性,并且比在输入上运行Quicksort时产生更好的时间复杂度.

这是我想到的合并排序模拟,使用这个例子:

  1) For position 0, Comparing 1 & 2, 1 is smaller let it stay at it's original place
  2) For position 1, Comparing 2 & 4, 2 is smaller so swap 2 and 4
  3) For position 2, Comparison now is between 4 and 3 (5 > 4 anyways) swap 3 and 5
  4) For position 3, Comparison between 4 & 5, swap 4 and 7
  5) For position 4, Comparison between 7 & 5, swap 8 and 5 
  6) For position 5, Comparison between 7 & 8 (OUCH!!) it should have been between 7 & 6

看起来这个问题类似于排序矩阵的排序行,其中就地合并太复杂了.

最佳答案
有关解决此确切问题的线性时间算法,请参阅http://comjnl.oxfordjournals.org/content/38/8/681.full.pdf+html,并指出在该解决方案上花费了多少精力.

我的猜测是,面试官有一些他们认为有用的可爱答案,但事实并非如此.第二个最好的猜测是他们没有指出复杂性的原因.

在一次采访中我实际上会说,“我不知道如何有效地做到这一点,虽然我确信有关于这个问题的研究.但这是一个效率低下的答案.”然后我会做一些明显有效的事情.

转载注明原文:algorithm – 就地对具有2个已排序子数组的数组进行排序 - 代码日志