归并排序

 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 }
归并排序(升序)

 

posted @ 2018-01-30 14:29  凌乱风中  阅读(75)  评论(0编辑  收藏  举报