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 }
View Code

相关文章: