1 #include"iostream.h" 2 void Merge(int c[],int d[],int l,int m,int r){ 3 int i=l,j=m+1,k=l; 4 while((i<=m)&&(j<=r)){//循环两组中较小者先放入d[]暂存 5 if(c[i]<=c[j]) d[k++]=c[i++]; 6 else d[k++]=c[j++]; 7 } 8 if(i>m) for(int q=j;q<=r;q++) d[k++]=c[q]; 9 else for(int q=i;q<=m;q++) d[k++]=c[q]; 10 } 11 12 void MergePass(int x[],int y[],int s,int n){ 13 int i=0; 14 while(i<=n-2*s){ 15 Merge(x,y,i,i+s-1,i+2*s-1); 16 i=i+2*s; 17 } 18 if(i+s<n) Merge(x,y,i,i+s-1,n-1); 19 else for(int j=i;j<=n-1;j++) y[j]=x[j]; 20 } 21 22 void MergeSort(int a[],int n){ 23 int* b=new int[n]; 24 int s=1; 25 while(s<n){ 26 MergePass(a,b,s,n); 27 s+=s; 28 MergePass(b,a,s,n); 29 s+=s; 30 } 31 } 32 33 void main(){ 34 int a[10] = {13,27,19,2,8,12,2,8,30,89}; 35 int size = sizeof(a)/sizeof(int); 36 MergeSort(a,size+1); 37 for(int i=0;i<size;++i) 38 cout<<a[i]<<","; 39 cout<<endl; 40 }
相关文章: