Merge Sort

 1 #include<stdlib.h>
 2 #include<stdio.h>
 3 void Merge( int source[] , int temp[] , int start , int mid , int end )
 4 {
 5     int i = start , j = mid + 1 , k = start ;
 6     while ( i != mid + 1 && j != end + 1 )
 7     {
 8         if( source[i] > source[j] )
 9             temp[k++] = source[i++];
10         else
11             temp[k++] = source[j++];
12     }
13     while( i != mid + 1 )
14         temp[k++] = source[i++];
15     while( j != end + 1 )
16         temp[k++] = source[j++];
17     for( i = start ; i <= end ; i++ )
18         source[i] = temp[i];
19 }   //ÄÚ²¿Ê¹Óõݹé
20 void MergeSort( int source[] , int temp[] , int start , int end )
21 {
22     int mid;
23     if( start < end )
24     {
25         mid = ( start + end ) / 2 ;
26         MergeSort( source , temp , start , mid );
27         MergeSort( source , temp , mid+1 , end );
28         Merge( source , temp , start , mid , end );
29     }
30 }
31 int main()
32 {
33     int a[]={18,78,244,36,9,12,4,5,68,7,4,895,321,50,10,30,98,74,56,13,25,46,789,420,159,360,5648,78,1,2,3,6,98};
34     int i,b[1000];
35     MergeSort( a , b , 0 , sizeof(a)/sizeof(a[0])-1 );
36     for( i = 0 ; i < sizeof(a)/sizeof(a[0]) ; i++ )
37         printf( "%d\t" , a[i] );
38     printf("\n");
39     return 0;
40 }
Merge

 下面这种是总的写法:

 1 #include<stdio.h>
 2 #include<string.h>
 3 void Merge_Sort( int *a , int l , int r )
 4 {
 5     int len = r - l ;
 6     if( len <= 1 )  return;
 7     int mid = l + len/2 ;
 8     Merge_Sort( a , l , mid ) ;
 9     Merge_Sort(a , mid, r);
10     int p1 = l,p2 = mid;
11     int temp[10000];
12     for(int i = l ; i < r ; i++ )
13     {
14         if( p1 == mid)
15         {
16             temp[i] = a[p2];
17             p2++;
18         }
19         else if( p2 == r)
20         {
21             temp[i] = a[p1];
22             p1++;
23         }
24         else
25         {
26             if( a[p1] < a[p2] )
27             {
28                 temp[i] = a[p1];
29                 p1++;
30             }
31             else
32             {
33                 temp[i] = a[p2];
34                 p2++;
35             }
36         }
37     }
38     for(int i = l ; i < r ; i++ )
39         a[i] = temp[i];
40 }
41 
42 int main()
43 {
44     int n,i;
45     int a[] ={10,45,32,69,52,10,58,15};
46 
47     Merge_Sort( a , 1 , sizeof(a)/sizeof(int) );
48     for( i = 1 ; i < sizeof(a)/sizeof(int) ; i++ )
49         printf("%d ",a[i]);
50     return 0;
51 }
Merge

 

posted @ 2015-02-01 09:53  92度的苍蓝  阅读(158)  评论(0编辑  收藏  举报
http://images.cnblogs.com/cnblogs_com/Running-Time/724426/o_b74124f376fc157f352acc88.jpg