是什么原因inplace_merge需要额外的内存

时间:2013-07-10 16:50:41

标签: c++ sorting stl

我知道这个问题: inplace_merge: What causes a complexity of N*log(N) vs. N-1?

但我发现答案不能令人满意,因为我对A真正感兴趣的部分没有明确解释。 更具体地说,不清楚(对我来说:))为什么cant inplace_merge在线性时间内没有任何额外的内存进行合并,只需从start开始,当你的当前项目大于第二个范围(中间,结束)时恒定时间交换。

1 个答案:

答案 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
               ^   ^

你已经到了其中一个子序列的末尾,所以你停下来。合并的序列是否已排序?