Forward Radix Sort

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 up previous
Next: Discussion Up: SORTING IN LINEAR TIME Previous: Faster Sorts Via Bit