位图排序示例

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)寻找旋转排序数组中的最小值 个人题解

排序8:位图排序

使用来自其他 32 位位图的 Alpha 通道组成新的 32 位位图

Java之大数据位图法(无重复排序,重复排序,去重复排序,数据压缩)

将位图保存到文件导致黑色图像

剑指 Offer 53 - I. 在排序数组中查找数字 I c++/java详细题解