原理图
动画演示
代码实现
#include <iostream>
using namespace std;
void merge ( int A[ ] , int f, int c, int e) {
int i = f;
int j = c + 1 ;
int k = 0 ;
int * tmp = new int ( e - f + 1 ) ;
while ( i <= c && j <= e) {
if ( A[ i] <= A[ j] ) {
tmp[ k++ ] = A[ i++ ] ;
} else {
tmp[ k++ ] = A[ j++ ] ;
}
}
int start = i;
int end = c;
if ( j <= e) {
start = j;
end = e;
}
while ( start <= end) {
tmp[ k++ ] = A[ start++ ] ;
}
for ( i = 0 ; i < e - f + 1 ; i++ ) {
A[ f + i] = tmp[ i] ;
}
}
void merge_sort_c ( int A[ ] , int f, int e) {
if ( f >= e) {
return ;
}
int c = ( f + e) / 2 ;
merge_sort_c ( A, f, c) ;
merge_sort_c ( A, c + 1 , e) ;
merge ( A, f, c, e) ;
}
void merge_sort ( int A[ ] , int n) {
merge_sort_c ( A, 0 , n - 1 ) ;
}
void arr_print ( int A[ ] , int n) {
for ( int i = 0 ; i < n; ++ i) {
cout << A[ i] << " " ;
}
}
int main ( ) {
int A[ 18 ] = { 5 , 6 , 3 , 1 , 8 , 7 , 2 , 4 } ;
merge_sort ( A, 8 ) ;
arr_print ( A, 8 ) ;
return 0 ;
}
运行结果