void Merge(int *A,int p,int q,int r) { int n1=q-p+1; int n2=r-q; int *L=new int[n1]; int *R=new int[n2]; for(int i=0;i<=n1-1;++i) { L[i]=A[p+i]; } for(int j=0;j<=n2-1;++j) { R[j]=A[q+j+1]; } for(int k=p,i=0,j=0;k<=r;++k) { if(L[i]<=R[j]) { A[k]=L[i++]; } else { A[k]=R[j++]; } if(i==n1) { while(j<n2) { A[++k]=R[j++]; } break; } else if(j==n2) { while(i<n1) { A[++k]=L[i++]; } break; } else continue; } delete[] L; delete[] R; } void Merge_Sort(int *A,int p,int r) { if(p<r) { int q=0; q=(p+r)/2; Merge_Sort(A,p,q); Merge_Sort(A,q+1,r); Merge(A,p,q,r); } else return ; } int _tmain(int argc, _TCHAR* argv[]) { int A[]={44,51,27,71,26,32,69}; Merge_Sort(A,0,sizeof(A)/sizeof(A[0])-1); for(int i=0;i<sizeof(A)/sizeof(A[0]);++i) { printf("%d ",A[i]); } printf("\n"); system("pause"); return 0; }