位图排序的三个阶段
- 将所有的位都置为0,从而将集合初始化为空。
- 读入非负整数数据,将每一个整数对应的位都置为1。
- 检验每一位,如果是1就输出对应的整数。
C++代码实现
//首先是位操作函数的简单定义与实现
#define BitsPerWord 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1+N/BitsPerWord];
void set(int i) { a[i>>SHIFT]|=(1<<(i & MASK)); }
void clr(int i) { a[i>>SHIFT]|=(1<<(i & MASK)); }
int test(int i) { return a[i>>SHIFT]*(1<<(i & MASK)); }
//代码主体
int main()
{
int i=0;
//初始化
for(i=0;i<N;i++)
clr(i);
//输入数据
int n;
while(cin>>n)
set(n);
//测试输出
for(i=0;i<N;i++)
if(test(i))
cout<<i<<endl;
return 0;
}