bit_map映射实现高速排序查找

Bit_map就是用一个bit位来标记某个元素对应的Value,而key即是该元素。由于采用了bit为单位来存储数据,因此在存储空间方面,可以大大节省。

例如,要对0~7内的5个元素(4,5,2,5,3)排序(元素没有重复)。要表示8个数据,采用bit_map方法只需要8个bits(1bytes),。首先将bit都置为0,如图1

Bit_map - 枫叶 - 枫叶

图1

 然后遍历这个5个元素,首先第一个元素是4,则把4对应的位置置为1,因为从0开始计数,所以第5位置1,如图2

Bit_map - 枫叶 - 枫叶

 图2

然后再处理第二个元素7,将第8位置1,依次处理其他元素,相应位置1,如图3

Bit_map - 枫叶 - 枫叶

图3

 bit_map适用的范围:

可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下

#include<stdio.h>
#include<memory.h>
#define BYTESIZE 8

void SetBit(char* p,int posi)
{
 printf("bitset/n");
 printf("%d/n",posi);

 for(int i=0;i<(posi/BYTESIZE);i++) //跳转到下一个字节
 {
  p++;
 }
 *p=*p|(0x01<<(posi%BYTESIZE)); //利用或操作设置相应位而不改变其他位
}
void BitMapSort()
{
 int num[]={3,5,2,10,6,12,8,14,9,20,21};
 const int BufferLen=3;
 char* pBuffer=new char[BufferLen];
 memset(pBuffer,0,BufferLen);

 for(int k=0;k<11;k++)
 {
  SetBit(pBuffer,num[k]);   //设置相关位
 }

 printf("output the sort result:/n");
 for(int i=0;i<BufferLen;i++)
 {
  for(int j=0;j<BYTESIZE;j++)
  {
  // printf("output/n");
   if((*pBuffer&(0x01<<j))==(0x01<<j))  //将字节中的数据与掩码(0x01<<j)做与操作然后做比较
   {
    printf("%d/n",i*BYTESIZE+j);  //输出相关位代表数据
   }
  }
  pBuffer++;
 }
}
int main()
{
 BitMapSort();
 return;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值