在编程珠玑开篇--磁盘文件排序问题一文中,要求输入时某个正整数不会重复出现。 如果每个整数重复出现的次数至多10次,我们应该如何修改方案呢?
如果每个整数最多出现10次,那么我们就可以使用半个字节4位,统计出现的次数。
相应的设置函数也应该修改:
#define BITSPEREORD 8 // the type int contains 8 bit num
#define SHIFT 3 // pow(2,3)
#define MASK 0X07 //00000111
#define NUMBER 10000000
int bitBuffer[ 1 + NUMBER / BITSPEREORD ] ;
void clr( int i ) //set every bit 0
{
bitBuffer [ i >> SHIFT ] &= ~ (0X0F<< 4* (i & MASK) ) ;
}
//i & MASK 相当于 i mod 32
void set ( int i ) //set the n bits 1
{
bitBuffer [ i >> SHIFT ] += ( 1 << 4*(i & MASK) ) ;
}
int test( int i ) //read the sort number from bitBuffer
{
return bitBuffer [ i >> SHIFT ] & ( 0X0F << 4*( i & MASK )) ;
}