unsigned int Tab[],unsigned int Bit){
// сортировка таблицы Tab на отрезке Left - Right
// по битам, начиная с бита Bit
int k;
if(Left>=Right) return;
k=BitPart(Left,Right,Tab,Bit);
if((Bit>>1)!=0){
BitSort(Left,k,Tab,Bit>>1);
BitSort(k+1,Right,Tab,Bit>>1);
}
}
//-----------------------------------------------------
void BinarySort(int n,unsigned Tab[], unsigned int keylen){
// прокладка к BitSort, чтобы не пугать пользователя
// аргументами BitSort
unsigned Bit;
Bit=(1<<(keylen-1));
BitSort(0,n-1,Tab,Bit);
}
Рассмотренная сортировка так же, как и следующая, не основана на сравнении ключей. Приблизительную оценку времени работы можно получить из следующих соображений. Пусть длина ключа М битов. Если таблица содержит все возможные ключи, которые можно составить из М битов, то число ключей
или
. Таким образом, для сортировки нужно пройти все данные столько раз, сколько битов в ключе и время работы пропорционально
.