1、算法描述与分析
(1)问题的描述
将两个有序序列合并(merge)为一个有序序列问题的形式化表示为:
输入:序列A[p...r]。其中,子序列A[p...q]和A[q+1...r]是有序的。
输出:A[p...r]所有元素的重排,使之有序。
用一个渐增型算法解决此问题。首先,把A[p...q]和A[q+1...r]分别复制到序列L[1...n1]和R[1...n2]中,其中n1=q-p+1,n2=r-q。然后,维护3个变量i、j和k,i、j初始化为1,k初始化为p。比较L[i]和R[j],将较小者复制到A[k],调整i、j和k使得它们各自指向L、R和A的合适的位置:若L[i]≤R[j],则i增加1,否则j增加1。无论如何k都要增加1,循环往复,直至L和R之一被扫描完。然后,将另一个序列中尚存的元素复制到A[k...r]。在此过程中,A[p...k-1]中的元素是A[p...r]中最小的k-p个元素,并且已排好序。随着k的增长,A[p...k]渐增为一个有序序列。
(2)算法的伪代码描述
MERGE(A, p, q, r)
1 n1 <-- q - p -1
2 n2 <-- r - q
3 创建数组L[1...n1