一个数组包含两个子排序数组。请提供一种原地算法来对这两个子数组进行排序。
例如:输入:1 4 5 7 8 9 2 3 6 10 11,输出:1 2 3 4 5 6 7 8 9 10 11
我考虑使用原地归并排序、插入排序(由于子数组已经排序)和快速排序等方法,但是无法想到比使用标准排序方法更好的复杂度解决方案。
请帮助我找到一种算法,利用已排序的子数组属性,使得时间复杂度优于在输入上运行快速排序。
这是我想到的归并排序模拟,使用以下示例:
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
看起来这个问题类似于对矩阵的排序,其中就地合并过于复杂。