int partition( vector<int> & data, int start, int end, int pivot_position ) { int x = data[pivot_position]; int i = start - 1; int j = end + 1; while( true ) { do j--; while( data[j] > x ); do i++; while( data[i] < x ); if( i < j ) swap( data, i, j ); else return j; } }