首页 > 编程语言 > 详细

【递归】归并排序

时间:2015-04-06 15:38:32      阅读:138      评论:0      收藏:0      [点我收藏+]
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int a[10000],b[10000],n;
 5 
 6 
 7 void Merge(int left,int mid,int right)
 8 {
 9     int l=left,m=mid,k=left;
10     while(l<mid&&m<=right)
11     {
12         if(a[l]<a[m])
13         {
14             b[k]=a[l];
15             l++;
16         }else
17         {
18             b[k]=a[m];
19             m++;
20         }
21         k++;
22     }
23     if(l==mid)
24     {
25         while(m<=right){
26             b[k]=a[m];
27             k++;
28             m++;
29         }
30     }
31     if(m>right)
32     {
33         while(l<mid)
34         {
35             b[k]=a[l];
36             k++;
37             l++;
38         }
39     }
40 }
41 
42 void copy(int left,int right)
43 {
44     int l;
45     for(l=left;l<=right; l++)
46     {
47         a[l]=b[l];
48     }
49 }
50 
51 void MergeSort(int left,int right)
52 {
53     if(left<right)
54     {
55         if(right-left==1)
56         {
57             if(a[left]>a[right])
58             {
59                 int g=a[left];
60                 a[left]=a[right];
61                 a[right]=g;
62             }
63         }
64         else
65         {
66             int mid = left+(right-left)/2;
67             MergeSort(left,mid);
68             MergeSort(mid+1,right);
69             Merge(left,mid+1,right);
70             copy(left,right);
71         }
72     }
73 
74 }
75 
76 
77 int main()
78 {
79     scanf("%d",&n);
80     int i;
81     for(i=0; i<n; i++)
82     {
83         scanf("%d",&a[i]);
84     }
85     MergeSort(0,n-1);
86     for(i=0; i<n; i++)
87         printf("%d\n",a[i]);
88     return 0;
89 }

 

【递归】归并排序

原文:http://www.cnblogs.com/zhouyee/p/4395891.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!