zoukankan      html  css  js  c++  java
  • 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	" , a[i] );
    38     printf("
    ");
    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
  • 相关阅读:
    HI3518+RTSP(转)
    Linux常用命令英文全称与中文解释(转)
    旋转编码器正反转检测
    shell文件操作大全(转)
    makefile文件操作大全(转)
    Linux文件操作高频使用命令(转)
    浅谈linux中的根文件系统(转)
    分压电阻采样问题(转)
    python实现邮件发送
    50个很棒的Python模块
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4265215.html
Copyright © 2011-2022 走看看