归并排序的递归形式
思路:采用分治的思想,将一段待排序的数不断的一分为二,直到每段数只有一个时停止,再将这些分好的数不断地有序的合并在一起数组则有序。
#include <iostream>
using namespace std;
const int n = 1000 ;
void mergesort_end ( int a[ ] , int tempArr[ ] , int left, int right) {
int i = left;
int mid = ( left + right) / 2 ;
int l_pos = left;
int r_pos = mid + 1 ;
while ( l_pos <= mid && r_pos <= right) {
if ( a[ l_pos] < a[ r_pos] ) tempArr[ i++ ] = a[ l_pos++ ] ;
else tempArr[ i++ ] = a[ r_pos++ ] ;
}
while ( l_pos <= mid) {
tempArr[ i++ ] = a[ l_pos++ ] ;
}
while ( r_pos <= right) {
tempArr[ i++ ] = a[ r_pos++ ] ;
}
for ( int i = left; i <= right; i++ ) {
a[ i] = tempArr[ i] ;
}
}
void mergesort ( int a[ ] , int tempArr[ ] , int left, int right) {
if ( left < right) {
int mid = ( left + right) / 2 ;
mergesort ( a, tempArr, left, mid) ;
mergesort ( a, tempArr, mid + 1 , right) ;
mergesort_end ( a, tempArr, left, right) ;
}
}
void merge ( int a[ ] , int n) {
int * tempArr = new int [ n] ;
mergesort ( a, tempArr, 0 , n - 1 ) ;
delete [ ] tempArr;
}
int main ( ) {
int a[ ] = { 12 , 4 , 3 , 57 , 9 , 43 , 6 , 8 } ;
int n = 8 ;
merge ( a, 8 ) ;
int i = 0 ;
while ( i < n) {
cout << a[ i] << " " ;
i++ ;
}
return 0 ;
}