通过位图对纯数字数据排序
条件:数字密度较大,每个数只出现一次,数字在一定范围内,纯数字数据#include<iostream>using namespace std;#define BITSPERINT sizeof(int)//数组num中每个元素有多少位#define MASK 0x1F//对于每个待输入的数字,与MASK与,得到在num[i
·
条件:数字密度较大,每个数只出现一次,数字在一定范围内,纯数字数据
#include<iostream>
using namespace std;
#define BITSPERINT sizeof(int)//数组num中每个元素有多少位
#define MASK 0x1F //对于每个待输入的数字,与MASK与,得到在num[index]中第几位order
#define SHIFT 5 //对于每个待输入的数字,右移5(除32)找到对应下标index
#define N 10000000
int num[1 + N/BITSPERINT]//也可以用char
//以下函数假定没有异常输入
void Clear(int i)//将第i位置0
{
//i&MASK即i%(MASK+1) i>>SHIFT即i/SHIFT 改用位运算速度快
num[i>>SHIFT] &= ~(1<<(i&MASK));
}
void Set(int i)//将第i位置1
{
num[i>>SHIFT] |= (1<<(i&MASK));
}
int Read(int i)//判断i是否出现过非0则存在,0则不存在
{
return num[i>>SHIFT] & (1<<(i&MASK));
}
/*0-NClear(),然后依次将待排序数Set,最后0-N依次Read(),若返回非0,则输出该数字,完成排序。*/
更多推荐
已为社区贡献1条内容
所有评论(0)