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

 

posted @ 2012-12-03 10:54  tsubasa_wp  阅读(166)  评论(0编辑  收藏  举报