BitSort

这个题为《编程珠玑》中提到的算法,解题思路和桶排序/基数排序一样,适用于大量没有重复的数据。

结题思路:

  1.遍历整个数据文件,每提取一个数据,在BitMap中对应的位置赋1

  2.遍历BitMap的每一位,为1的位置上输出其再BitMap中的坐标

 1 #include <iostream>
 2 #include <fstream>
 3 using namespace std;
 4 const int maxnum=10000000;  //设置位图大小
 5 const int mask=0x1f;  //求余
 6 void setbit(int *a,int tmp);
 7 int check(int *a,int tmp);
 8 int main()
 9 {
10     int bit[maxnum/32+1];
11     for(int i=0;i<maxnum/32+1;i++)
12         bit[i]=0;
13     ifstream fin;
14     ofstream fout;
15     int tmp;
16     fin.open("test.txt");
17     fout.open("result.txt");
18     fin>>tmp;
19     while(tmp!=-1)
20         {
21             setbit(bit,tmp);
22             fin>>tmp;
23         }
24     for(int i=0;i<maxnum;i++)
25     {
26         if(check(bit,i))
27         {
28             cout<<i<<endl;
29             fout<<i<<endl;
30         }
31     }
32     fin.close();
33     fout.close();
34     cout<<"end!";
35     return 0;
36 }
37 void setbit(int *a,int tmp)
38 {
39     a[tmp>>5]|=(1<<(tmp&mask));
40 }
41 int check(int *a,int tmp)
42 {
43     return a[tmp>>5]&(1<<(tmp&mask));
44 }

 

posted @ 2016-12-08 22:44  wilderness  阅读(302)  评论(0编辑  收藏  举报