В Programming Pearls есть алгоритм, который сортирует массивы различной длины, но сортирует по времени, пропорциональному сумме их длины. Например, если у нас есть массив записей x[0...n-1]
, и каждая запись имеет целочисленную длину и указатель на массив bit[0...length-1]
.
Код реализован следующим образом:
void bsort(l, u, depth){
if (l >= u)
return ;
for (i = l; i <= u; i++){
if (x[i].length < depth)
swap(i, l++);
}
m = l;
for (int i = l; i < u; i++){
if (x[i].bit[depth] == 0)
swap(i, m++);
}
bsort(l, m - 1, depth + 1);
bsort(m, u, depth + 1);
}
Мой вопрос таков, учитывая запись:
x[6] = {"car", "bus", "snow", "earth", "dog", "mouse"}
Я знаю, как получить длину строки, но как насчет битового массива? Как я могу сделать битовый массив, подходящий для этого массива строк? И даже x[i].bit[depth]
как я могу это реализовать?