码迷,mamicode.com
首页 > 编程语言 > 详细

使用常量辅助空间的归并排序

时间:2015-03-03 15:06:48      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

 

题目要求:合并两个已有序序列为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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!