in-place merge

问题描述:有一个数组a1...anb1...bn,在o(n)的时间内,o(1)的空间内,将数组merge为a1b1...anbn

 

解决方法:

1. 直观地方法,计算每个元素的最终位置,并进行移动,问题,多个cycle

For instance consider the case when n=4

1 2 3 4 5 6 7 8

It should become

5 1 6 2 7 3 8 4

so 1 -> 5 -> 7 -> 8 -> 4 -> 2 -> 1 (-> means goes to)
and 3 -> 6 -> 3

 

因此这种方法不能全部解决

 

2. divide-conquer

将数组变成 a1..akb1...bkak+1..anbk+1...bn,然后分别解决子数组

 

3. 数论:如果n是3的幂,则方法1中描述的cycle只会出现一个

 

4.结合起来,选择一个k < n, 并且k是3的幂,将数组进行划分,对前面的数组按方法1进行解决,然后对后面的数组继续这个方法

 

 

你可能感兴趣的:(in-place merge)