算法导论-----归并排序
来源:互联网 发布:无线键盘 游戏 知乎 编辑:程序博客网 时间:2024/05/29 05:01
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;}