If r is not between i and j, there's no point in sorting...
int select( vector<int> & data, int i, int j, int r )
{
if( i == j )
return data[r];
int l = rando.RandInt( i, j );
int k = partition( data, i, j, l );
if( k == r)
return data[r];
if( r < k )
return select( data, i, k-1, r );
else
return select( data, k+1, j, r );
}
Show that the expected running time is O(n) [HW].