在编程珍珠中,有一种算法可以对不同长度的数组进行排序,但会按照与其长度之和成比例的时间进行排序。例如,如果我们有一个记录数组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]
我该如何实现呢?
答案 0 :(得分:1)
字符数组(或任何其他类型的字符串)也是位数组 - 毕竟字符由位组成。因此,您不必创建单独的数组,只需要找到一种方法来访问数组中的给定位。为此,你将不得不使用一些操作。您可以在此处找到一些如何完成此操作的示例:Any smarter way to extract from array of bits?。
基本上,首先必须弄清楚所需位所在的字节,然后获取该特定位的值。一些事情:
char* array = "the array";
int required_bit = 13;
int bit = required_bit & 0x7; // get the bit's offset in its byte
int byte = required_bit >> 3; // get the bit's byte
int val = (array[byte] >> bit) & 0x1; // check if the bit is 1
现在将它包装在一个函数中(可能带有额外的绑定检查,以确保给定的required_bit
不在数组之外),并与x[i]
一起使用。