标签:
题目要求:合并两个已有序序列为A[0…i],A[i+1…N-1] 为A[0...N-1], 要求使用常量辅助空间
为叙述方便,表示A[0…i]为a[0..n-1],A[i+1…N-1]为b[0…m-1],问题实际上是使用常数辅助空间的归并排序
只用一个辅助空间的归并排序,临时变量 int x;
思路如下:如果a[0] 小于b[0],问题变为合并a[1..n-1]和b[0…m-1],还是同一个问题迭代解决
否则,即a[0]大于b[0],令x=a[0],a[0]=b[0]. 次是b[0]位置已为空,可以将x用插入排序的方法插入到数组b中,接下来问题也变为合并a[1..n-1]和b[0…m-1],迭代解决。
使用k个辅助空间的归并排序,k远远小于元素数目,辅助数组为c[k]
原理类似,将a[0…k-1]移到c[0…k-1]中,然后用常规方法将b[0..m-1]和c[0…k-1]归并k个元素到位置a[0…k-1],假设此时数组c中剩余的元素为c[t…k-1],则此时数组b中前端必然也空出了k—t个位置,即b[0..k-t-1]必然没有元素。接下将b[k-t…m-1]和c[t…k-1]归并到b中的前端空位,数组c变为空,现在问题变成了归并a[k…n-1] 和b[0…m-1]了,迭代解决,注意终止条件。
标签:
原文地址:http://www.cnblogs.com/gaoyanqing/p/4310800.html