0w1

HR Quicksort 2 - Sorting ( Easy )

https://www.hackerrank.com/challenges/quicksort2
第一次寫 quickSort,只是想記錄一下。

void quickSort( int ql, int qr, vi &A ){
    if( ql == qr ) return;

    int pivot = A[ ql ];
    queue< int > small, large;
    for( int i = ql + 1; i <= qr; ++i ){
        if( A[ i ] < pivot )
            small.push( A[ i ] );
        else
            large.push( A[ i ] );
    }

    int pivot_pos = ql + small.size();

    for( int i = ql; i <= qr; ++i ){
        if( i == pivot_pos )
            A[ i ] = pivot;
        else if( !small.empty() )
            A[ i ] = small.front(),
            small.pop();
        else
            A[ i ] = large.front(),
            large.pop();
    }

    if( pivot_pos - 1 >= ql ) quickSort( ql, pivot_pos - 1, A );
    if( pivot_pos + 1 <= qr ) quickSort( pivot_pos + 1, qr, A );

    for( int i = ql; i <= qr; ++i )
        cout << A[ i ] << ( i == qr ? '\n' : ' ' );
}