【这是一道面试题。我找不到副本。]
一个数组包含两个子排序数组。给出一个就地算法对两个子数组进行排序。
例如: 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
似乎这个问题类似于对矩阵的排序行进行排序,其中就地合并太复杂了。