我知道这个问题: inplace_merge: What causes a complexity of N*log(N) vs. N-1?
但我发现答案不能令人满意,因为我对A真正感兴趣的部分没有明确解释。 更具体地说,不清楚(对我来说:))为什么cant inplace_merge在线性时间内没有任何额外的内存进行合并,只需从start开始,当你的当前项目大于第二个范围(中间,结束)时恒定时间交换。
答案 0 :(得分:3)
想象一下,您正在合并两个已排序的子序列:
11, 12, 13, 14 1, 2, 3, 4
^ ^
1< 11,所以你交换:
1, 12, 13, 14 11, 2, 3, 4
^ ^
11< 12,交换:
1, 11, 13, 14 12, 2, 3, 4
^ ^
12< 13,交换:
1, 11, 12, 14 13, 2, 3, 4
^ ^
13< 14,交换:
1, 11, 12, 13 14, 2, 3, 4
^ ^
你已经到了其中一个子序列的末尾,所以你停下来。合并的序列是否已排序?