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]; }

浙公网安备 33010602011771号