void Merge(RcdType SR[],RcdType TR[],int i,int m,int n){
//两个有序子序列的归并,SR中存待归并数据,TR是数据暂存的临时空间,i是SR第一个序列开始,m是第1个子序列结尾位置,n是第2个子序列结束位置
for(j=m+1,k=i;i<=m&&j<=n;++k){//j指向第二个子序列开始位置,k指向i指针对应位置(即让TR插入元素的起始位置与SR相同)
if(LQ(SR[i].key,SR[j].key)) TR[k]=SR[i++];
else TR[k]=SR[j++];
}
//判断哪个子序列还有剩余元素,全部复制到TR
if(i<=m) TR[k...n]=SR[i...m]; //伪代码,可以用while循环实现
if(j<=n) TR(k...n)=SR[j...n];
}
void MSort(RcdType SR[],RcdType &TR1[],int s,int t){
if(s==t) TR1[s]=SR[s];
else{
m=s+t/2;
MSort(SR,TR2,s,m);
MSort(SR,TR2,m+1,t);
Merge(TR2,TR1,s,m,t);
}
}
void MergeSort(SqlList &L){
Msort(L.r,L.r,1,L.length);
}