位图排序示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位图排序示例相关的知识,希望对你有一定的参考价值。
第0行
第1行(32-63),依次类推。
C++代码如下:
/** @file Bitmap
* @copyright personal
* @brief 接口头文件
* @version v1.0.0
* @author fangyuan
* @date 2015/10/20
* @note 测试版本
*/
#include "iostream"
#include <math.h>
#include "vector"
#define INT_BYTES sizeof(int) //int型所占字节
#define INT_BITS (8*INT_BYTES) //int型所占位数
#define MAXNUM (1024*1024*1024) //最大数
#define SHIFT_BIT (int)(log(double(INT_BITS))/log(double(2))) //最大移位数,左移一位等价于*2,即最大^SHIFT_BIT
#define MASK (INT_BITS-1) //根据int类型变化,一般为31
using namespace std;
//int bitmap[MAXNUM/INT_BITS]; //超出数组范围定义
vector<int> bitmap(MAXNUM/INT_BITS); //自动初始化为,若非C++,可自定为list;
void set(int i)
{
//i>>SHIFT_BIT等价于i/INT_BITS,i & MASK等价于i%MASK,取余的分母一般为^n-1
bitmap[i>>SHIFT_BIT] |= 1<<(i & MASK); //当前位,置为1,再进行或运算
}
//获取第i行,第j列
bool get(int i,int j)
{
//return (bitmap[i>>SHIFT_BIT] & 1<<(i & MASK));
return (bitmap[i] & 1<<(j & MASK));
}
int main()
{
set(2);
set(3);
set(50000000);
set(100);
set(50);
//不按数字遍历,按行遍历,减少遍历次数
for(int i = 0; i < bitmap.size(); ++i)
{
if( !bitmap[i] )
{
continue;
}
for(int j = 0; j <= MASK;++j)
{
bool result = get(i,j);
if(result)
{
cout << i*INT_BITS+j << endl;
}
}
}
system("pause");
return 0;
}
本文出自 “爱幻想的菜鸟” 博客,请务必保留此出处http://3dot1415926.blog.51cto.com/8887443/1740530
以上是关于位图排序示例的主要内容,如果未能解决你的问题,请参考以下文章
领扣(LeetCode)寻找旋转排序数组中的最小值 个人题解
使用来自其他 32 位位图的 Alpha 通道组成新的 32 位位图