#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int b[ 10 ];void Merge( int c[], int d[], int l, int m, int r )
{
 int i = l, j = m + 1, k = l;
 while( ( i <= m ) && ( j <= r ) )
 if( c[ i ] <= c[ j ] ) d[ k++ ] = c[ i++ ];
 else d[ k++ ] = c[ j++ ];
 if( i > m )
 for( int q = j; q <= r; q++ ) d[ k++ ] = c[ q ];
 else
 for( int q = i; q <= m; q++ ) d[ k++ ] = c[ q ];
}void Copy( int c[], int d[], int n1, int n2 )
{
 for( int i = n1; i <= n2; i++ )
 c[ i ] = d[ i ];
}void MergeSort( int a[], int left, int right )
{
 if( left < right ) {
 int i = ( left + right ) / 2; //取中点,分成两路
 MergeSort( a, left, i );
 MergeSort( a, i + 1, right );
 Merge( a, b, left, i, right ); //合并到数组b
 Copy( a, b, left, right ); //复制到数组a
 }
}int main()
{
 int a[ 10 ], i;
 srand( time( 0 ) );
 for( i = 0; i < 10; i++ ) a[ i ] = rand() % 100; //随机生成
 for( i = 0; i < 10; i++ ) //输出随机生成的数据
 printf( "%d\t", a[ i ] ); 
 printf( "\n" );
 MergeSort( a, 0, 9 );
 for( i = 0; i < 10; i++ ) //输出排序后的结果
 printf( "%d\t", a[ i ] );
 printf( "\n" );
 return 0;
} //在vc++6.0上调试运行成功。若有不明白的地方,call me!!!
                                        
                                      2019-07-17 22:50:50