int partition_radix( vector<int> & data, int start, int end, int bit )
{
int i = start - 1;
int j = end + 1;
while( true )
{
do j--;
while( get_bit( data[j], bit ) == 1 && j >= start );
do i++;
while( get_bit( data[i], bit ) == 0 && i <= end );
if( i < j )
swap( data, i, j );
else
return j;
}
}
void radixsort( vector<int> & data, int start, int end, int bit )
{
if( start >= end ) return;
if( bit == -1 ) return;
int middle = partition_radix( data, start, end, bit );
radixsort( data, start, middle, bit - 1 );
radixsort( data, middle + 1, end, bit - 1 );
}
Next: Discussion
Up: SORTING IN LINEAR TIME
Previous: Faster Sorts Via Bit