归并排序

归并排序。以后留着复习数据结构用,看了很多个版本,这个版本写的比较好,我改编了一下。

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 #define N 1000000
 5 int que[N],p[N];;
 6 void Mergesort(int l,int r)
 7 {
 8     int mid,i,j,t;
 9     if(l < r)
10     {
11         mid = (l+r)/2;
12         Mergesort(l,mid);
13         Mergesort(mid+1,r);
14         t = l;
15         for(i = l,j = mid+1;j <= r&&i <= mid;)
16         {
17             if(p[i] > p[j])
18             {
19                 que[t++] = p[j++];
20             }
21             else
22             {
23                 que[t++] = p[i++];
24             }
25         }
26         if(j <= r)
27         {
28             for(;j <= r;j ++)
29             que[t++] = p[j];
30         }
31         else
32         {
33             for(;i <= mid;i ++)
34             que[t++] = p[i];
35         }
36         for(i = l;i <= r;i ++)
37         p[i] = que[i];
38     }
39 }
40 int main()
41 {
42     int i,n;
43     while(scanf("%d",&n)!=EOF)
44     {
45         for(i = 1;i <= n;i ++)
46         {
47             scanf("%d",&p[i]);
48         }
49         Mergesort(1,n);
50         for(i = 1;i <= n;i ++)
51         {
52             if(i == 1)
53             printf("%d",p[i]);
54             else
55             printf(" %d",p[i]);
56         }
57         printf("\n");
58     }
59     return 0;
60 }

 

posted @ 2012-09-21 21:42  Naix_x  阅读(159)  评论(0编辑  收藏  举报