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

}