归并排序

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);//归并 
     }
 }
原文地址:https://www.cnblogs.com/tianyudizhua/p/13414828.html