归并排序
1 #include <iostream> 2 using namespace std; 3 void MERGE(int a[],int p,int q,int r); 4 void MERGESORT(int a[],int p,int r); 5 6 void MERGE(int a[],int p,int q,int r) 7 { 8 int n1=q-p+1; 9 int n2=r-q; 10 int L[1000]={0}; 11 int R[1000]={0}; 12 for(int i=1;i<=n1;i++){ 13 L[i]=a[p+i-1]; 14 } 15 for(int j=1;j<=n2;j++){ 16 R[j]=a[q+j]; 17 } 18 int i=1; 19 int j=1; 20 for(int k=p;k<=r;k++){ 21 if(i==n1+1&&j==n2+1){ 22 break; 23 } 24 else if(i!=n1+1&&j!=n2+1){ 25 if(L[i]<=R[j]){ 26 a[k]=L[i]; 27 i++; 28 } 29 else{ 30 a[k]=R[j]; 31 j++; 32 } 33 } 34 else if(i==n1+1&&j!=n2+1){ 35 a[k]=R[j]; 36 j++; 37 } 38 else if(i!=n1+1&&j==n2+1){ 39 a[k]=L[i]; 40 i++; 41 } 42 } 43 } 44 45 void MERGESORT(int a[],int p,int r) 46 { 47 int q; 48 if(p<r){ 49 q=(p+r)/2; 50 MERGESORT(a,p,q); 51 MERGESORT(a,q+1,r); 52 MERGE(a,p,q,r); 53 } 54 } 55 56 int main() 57 { 58 int n; 59 cin>>n; 60 int a[1000]={0}; 61 for(int i=1;i<=n;i++){ 62 cin>>a[i]; 63 } 64 MERGESORT(a,1,n); 65 for(int i=1;i<=n;i++){ 66 cout<<a[i]<<" "; 67 } 68 return 0; 69 }