【编程珠玑】位图排序

/*==========================================================*\
| 《编程珠玑》位图排序:bitmap sort
\*==========================================================*/
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/BITSPERWORD];
void my_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;
	for (i = 0; i < N; i++)
		clr(i);
	while (scanf("%d", &i) != EOF)
		my_set(i);
	for (i = 0; i < N; i++) {
		if (test(i)) {
			printf("%d\n", i);
		}
	}
	return 0;
}

你可能感兴趣的:(编程)