这里主要写代码,具体原理可以查看https://blog.csdn.net/weixin_40449300/article/details/87620692
bit-map使用更少的空间,实现排序、去重
假设我们有a数组,里面存放1, 7, 9, 10, 30, 31, 32, 128, 129 这9个数字。由于这9个数字最大为129,我们可以用b[5](129/32=4,4+1=5)数组来表示这9个数字。
赋值
a[i] & 31表示a[i] % 32,对其求余;a[i] >> 5 表示 a[i] / 32
int a[] = {1, 7, 9, 10, 30, 31, 32, 128, 129};
int b[5];
memset(b, 0, sizeof(b));
for (int i = 0; i < sizeof(a) / 4; i++)
{
int pos2 = a[i] & 31;
b[a[i] >> 5] |= 1 << (a[i] & 31);
}
遍历
这里有两种方法,查找也可以根据以下代码改,执行以下代码将输出“1 7 9 10 30 31 32 128 129”,也就是a数组的内容。去重可以使用两个数组,根据判断条件实现
//方法一
for (int i = 0; i < 130; i++)