#include<stdio.h> void Merge(int arr[],int L,int M,int R) { int LeftSize=M-L; int RightSize=R-M+1; int Left[LeftSize]; int Right[RightSize]; /*1.fill in the left sub array*/ int i; for(i=L;i<M;i++) { Left[i-L]=arr[i]; } /*2. full in the right sub array*/ int j; for(j=M;j<=R;j++) { Right[j-M]=arr[j]; } int k; i=0;j=0;k=L;/*注意:K=L不是K=0*/ while(i<LeftSize&&j<RightSize) { if(Left[i]<Right[j]) { arr[k]=Left[i]; i++; k++; }else { arr[k]=Right[j]; j++; k++; } } while(i<LeftSize) { arr[k]=Left[i]; i++; k++; } while(j<RightSize) { arr[k]=Right[j]; j++; k++; } return ; } void MergeSort(int arr[],int L,int R) { if(L==R) { return; }else { int M=(L+R)/2; MergeSort(arr,L,M); MergeSort(arr,M+1,R); Merge(arr,L,M+1,R); } }