本机器上int类型大小为4字节,即32bit,因此使用bit数组能使桶排序的空间开销缩小为原来的1/32
bit数组可用于hash法去除重复元素或统计出现次数
代码如下:
#define SHIFT sizeof(int)*8 //32bit
int main(){
int bit_array[100] = {0}; //此bit数组支持的整数范围为1~3199
int m, n;
int a[] = {98, 333, 422, 77, 10, 2, 87, 8, 314, 222, 555};
for(int i = 0; i < sizeof(a)/sizeof(int); i++){
n = a[i] / (SHIFT); //注意SHIFT用括号包围,宏变量的本质是替换,而不是提前计算
m = a[i] % (SHIFT);
bit_array[n] |= 1<<m; //注意用位或
}
for(int i = 0; i < 100; i++){
for(int j = 0; j < SHIFT; j++){
if((bit_array[i] & (1<<j)) != 0) //注意用位与
printf("%d ", i*SHIFT+j);
}
}
printf("\n");
return 0;
}