MergeSort
void merge( vector<int> &v1, int low, int mid, int high ) { vector<int> v2(L); int i = low, j = mid + 1, k = low; while ( i <= mid && j <= high ) { if ( v1[i] <= v1[j] ) { v2[k++] = v1[i++]; } else { v2[k++] = v1[j++]; } } while ( i <= mid ) { v2[k++] = v1[i++]; } while ( j <= high) { v2[k++] = v1[j++]; } for ( int m = low; m <= high; m++) { v1[m] = v2[m]; } } void MergeSort( vector<int> &v, int a, int b) { if ( a >= b ) return; int mid = (a + b)/2; MergeSort(v, a, mid); MergeSort(v, mid+1, b); merge(v, a, mid, b); }
另一种实现:
void merge_sort( int *A, int x, int y, int *T ) { if ( y - x <=1 ) return; int m = ( x + y ) / 2; merge_sort(A, x, m, T); merge_sort(A, m, y, T); int p = x, q = m, i = x; while( p < m || q < y ) { if ( q >= y || ( p < m && A[p] <= A[q])) T[i++] = A[p++]; else T[i++] = A[q++]; } for ( i = x; i < y; i++) A[i] = T[i]; }