void Merge(int a[],int *Buff,int k,int n) { int i,j; int l1,l2,r1,r2; int m; l1=0; m=0; while(l1+k<=n-1) { l2=l1+k; r1=l2-1; r2=(l2+k-1<=n-1)?l2+k-1:n-1; for(i=l1,j=l2;i<=r1 && j<=r2;m++) { if(a[i]<=a[j]) { Buff[m]=a[i]; i++; } else { Buff[m]=a[j]; j++; } } while(i<=r1) { Buff[m]=a[i]; m++; i++; } while(j<=r2) { Buff[m]=a[j]; m++; j++; } l1=r2+1; } for(i=l1;i<n;i++) Buff[i]=a[i]; for(i=0;i<n;i++) a[i]=Buff[i]; } void MergeSort(int a[],int *Buff,int n) { int k; for(k=1;k<n;k*=2) Merge(a,Buff,k,n); }