您的位置:首页 > 其它

bitmap sort(适用于不重复的整数间的排序)

2012-05-03 00:00 288 查看
额外的信息多,排序效率就高。

1. 整数

2. 不重复

3. 一定范围内

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define BITPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000

int a[1 + N/BITPERWORD];

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 argc, char *argv[])
{
assert(argc == 3);
char *inputfile = argv[1];
char *outputfile = argv[2];

FILE *fin = fopen(inputfile, "r");
assert(fin != NULL);
FILE *fout = fopen(outputfile, "w");
assert(fout != NULL);

int i;
for (i=0; i<N; i++)
clr(i);
while (fscanf(fin, "%d", &i) != EOF)
set(i);
for (i=0; i<N; i++)
if (test(i))
fprintf(fout, "%d\n", i);
fclose(fin);
fclose(fout);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐