1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
   | void Merge(SqList &L,int low,int mid,int high){//low=1 high=n表长  	int i,j,k; 	SqList B;//辅助顺序表B  	B.data=new ElemType[MAXSIZE]; 	for(k=low;k<=high;k++) B.data[k]=L.data[k];//将L中所有的元素都复制到B中  	for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){ 		if(B.data[i]<=B.data[j]) L.data[k]=B.data[i++];//将B划分为左右半区 从各自半区第一个互相比较  		else L.data[k]=B.data[j++];//较小的插入到L中 然后后移继续比较大小 直到i超过mid或者j超过high  	} 	while(i<=mid) L.data[k++]=B.data[i++];//j越界了i还未遍历完 表示左边区剩下的都是大的  	while(j<=high)  L.data[k++]=B.data[j++];//i越界了j还未遍历完 表示右半区剩下的都是大的  	//这两个while循环只会有一个会执行  } bool MergeSort(SqList &L,int low,int high){ 	if(low<high){ 		int mid=(low+high)/2; 		MergeSort(L,low,mid);//左半区递归  		MergeSort(L,mid+1,high);//右半区递归  		Merge(L,low,mid,high); 	} 	return 1; }
  |