排序算法之二路归并排序

//MergeSort 二路归并排序 void Merge(int A[],int low,int mid,int high) { int *A1; int i=low,j=mid+1,k=0; A1=(int *)malloc((high-low+1)*sizeof(int)); while(i<=mid && j<=high) if(A[i]<A[j]) A1[k++]=A[i++]; else A1[k++]=A[j++]; while(i<=mid) A1[k++]=A[i++]; while(j<=high) A1[k++]=A[j++]; for(k=0,i=low;i<=high;k++,i++) A[i]=A1[k]; free(A1); } void MergePass(int A[],int length,int n) { int i; for(i=0;i+2*length-1<n;i=i+2*length) Merge(A,i,i+length-1,i+2*length-1); if(i+length<n) Merge(A,i,i+length-1,n-1); } void MergeSort(int A[],int n) { int length; for(length=1;length<n;length=2*length) MergePass(A,length,n); } 

你可能感兴趣的:(算法,merge)