归并排序
void Merge(int A[],int low,int mid,int high) { int B[N+1]; int i,j,k; //表A的两段A[low...mid]和A[mid+1...high]各自有序,将他们合并成一个有序表 for(int k=low;k<=high;k++) B[k]=A[k];//将A中的元素复制到B中 for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++) { if(B[i]<=B[j])//比较B的左右两段中的元素 A[k]=B[i++];//将较小的值复制到A中 else A[k]=B[j++]; } while(i<=mid) A[k++]=B[i++];//若第一个表未检测完,复制 while(j<=high)A[k++]=B[j++];//若第二个表未检测完,复制 } void MergeSort(int A[],int low,int high) { if(low<high) { int mid=(low+high)/2;//从中间划分两个子序列 MergeSort(A,low,mid);//对左侧子序列进行递归排序 MergeSort(A,mid+1,high);//对右侧子序列进行递归排序 Merge(A,low,mid,high);//归并 } }