算法导论第三版,第二章,第17页,归并排序 MERGE_SORT
我们先完成对两个已有序数组的排列
#include<iostream> #include<limits.h> using namespace std; void merge(int A[],int p,int q,int r) { int n1=q-p+1; int n2=r-q; int L[n1+1],R[n2+1]; for(int i=0;i<n1;i++) { L[i]=A[p+i]; } for(int i=0;i<n2;i++) { R[i]=A[q+i+1]; } L[n1]=INT_MAX; R[n2]=INT_MAX; int i=0,j=0; for(int k=p;k<=r;k++) { if(L[i]<R[j]) { A[k]=L[i]; i++; } else { A[k]=R[j]; j++; } } }
再每层完成递归
void merge_sort(int A[],int p,int r) { if(p<r) { int q=(r+p)/2; merge_sort(A,p,q); merge_sort(A,q+1,r); merge(A,p,q,r); } } int main() { int A[]={1,3,5,4,8,1,2,5,6,7,9,2,1,3,5,4,6,1,6,9}; for(int i=0;i<20;i++) { cout<<A[i]<<" "; } cout<<endl; merge_sort(A,0,19); for(int i=0;i<20;i++) { cout<<A[i]<<" "; } cout<<endl; }