归并排序

 1 ////////////////////////////////////////////
 2 //归并排序                                 //
 3 //Author:Gavin Ge                         //    
 4 //Date: 2014.7.5                          //
 5 ////////////////////////////////////////////
 6 
 7 
 8 #include < stdio.h >
 9 #include < stdlib.h >
10 void merge(int *array,int p,int q,int r)
11 {
12     int i,j;
13     int n1 = q-p+1;
14     int n2 = r-q;
15     int k = p;
16     int *Larray = (int *)malloc(sizeof(int)*(n1+1));
17     int *Rarray = (int *)malloc(sizeof(int)*(n2+1));
18     for(i = 0;i < n1;i++)
19     {
20         Larray[i] = array[p+i];
21     }
22     for(j = 0;j< n2;j++)
23     {
24         Rarray[j] = array[q+1+j];
25     }
26     i = j = 0;
27     while( i < n1 && j < n2 )
28     {
29         if(Larray[i] <= Rarray[j])
30         {
31             array[k] = Larray[i];
32                i = i + 1;
33             k++;
34         }
35         else
36         {
37             array[k] = Rarray[j];
38                j = j + 1;
39             k++;
40         }
41     }
42 
43     while(i < n1)
44         array[k++] = Larray[i++];
45     while(j < n2)
46         array[k++] = Rarray[j++];
47     free(Larray);
48     Larray = NULL;//消除迷途指针
49     free(Rarray);
50     Rarray = NULL;//消除迷途指针
51 }
52 
53 void mergesort(int *array,int p,int r)
54 {
55     int q;
56     if(p < r)
57     {
58         q = (p+r)/2;
59         mergesort(array,p,q);
60         mergesort(array,q+1,r);
61         merge(array,p,q,r);
62     }
63 }
64 
65 int main()
66 {
67     int i;
68     int array[] = {5,2,3,4,5,6,7,1,9};
69     int length = sizeof(array)/sizeof(array[0]);
70     printf("处理之前:\n");
71     for(i = 0;i < length;i++)
72     {
73         printf("%d",array[i]);
74     }
75     printf("\n排序之后\n");
76     mergesort(array,0,length);
77     for(i = 0;i < length;i++)
78     {
79         printf("%d",array[i]);
80     }
81     return 0;
82 }

 

posted @ 2014-07-13 10:27  dreamsyeah  阅读(67)  评论(0编辑  收藏  举报