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