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); }