位图算法实现思想:

将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间。

public class BitMapTest {
    /**
     * 参数说明:
     * @param buf 新定义的bit数组(int类型)
     * @param value 需排序的传入数值
     * @return
     * 
     * 功能说明:
     *     将value值转换为数组的下标,将数组buf的第value位置为1   
10       *     buf[value >> 5]表示value属于int数组的第几个成员
11       *     value & 0x1F 表示在对应int数组项中具体的第几个bit位
12       *     buf[value >> 5] |= (1 << (value & 0x1F))表示将对应数组项目中的bit位置为1
13       */
14      public static void encode(int []buf,int value){
15          buf[value >> 5] |= (1 << (value & 0x1F));
16      }
17     
18      /**
19       * 参数说明
20       * @param buf 编码后的bit数组
21       * @param value 传入的bit数组下标
22       * @return
23       * 
24       * 功能
25       * 判读buf数组中相应的数据项中对用的bit位是否为 1
26       */
27      public static int decode(int [] buf,int value){
28          return buf[value >> 5] & (1 << (value & 0x1F));
29      }
30     
31      public static void main(String[] args) {
32          int a[] = {3,98,15,12,7,9,8,17,6,11};
33          long start = System.currentTimeMillis();
34          int LENGTH = a.length;
35          int max = 0,i=0;
36         
37          for (i=0;i<LENGTH;i++){
38              if (a[i] > max){
39                  max = a[i];
40              }
41              System.out.print(a[i]+", ");
42          }
43          System.out.println();
44         
45          // 获取int数组的长度,取排序数子中的最大值与数组长度中的二者的最大值
46          max = max>LENGTH?max:LENGTH;
47          int size = max/32+1;//98/32+1=4
48         
49          int []r = new int[size];
50          for (i=0;i<LENGTH;i++){
51              encode(r,a[i]);
52          }
53         
54          // 遍历的长度大于max即可
55          for (i=0;i<max+1;i++){
56              if (decode(r,i) > 0){
57                  System.out.print(i + ",");
58              }
59          }
60          System.out.println();
61         
62          System.out.println("time:"+(System.currentTimeMillis()-start));
63      }
64  }

转载于:https://www.cnblogs.com/jianyuan/p/5410974.html

数据结构(五)位图算法相关推荐

  1. 浅谈算法和数据结构: 五 优先级队列与堆排序

    原文:浅谈算法和数据结构: 五 优先级队列与堆排序 在很多应用中,我们通常需要按照优先级情况对待处理对象进行处理,比如首先处理优先级最高的对象,然后处理次高的对象.最简单的一个例子就是,在手机上玩游戏 ...

  2. python数据结构推荐书-「算法与数据结构」从入门到进阶吐血整理推荐书单

    推荐一下「算法与数据结构」从入门到进阶的书单. 一.入门系列 这些书籍通过图片.打比方等通俗易懂的方法来讲述,让你能达到懂一些基础算法,线性表,堆栈,队列,树,图,DP算法,背包问题等,不要求会实现, ...

  3. 三维点云学习(2)五种算法比较

    三维点云学习(2)五种算法比较 代码参考来自 黎老师github 本次测试包含五种算法比较: octree print("octree --------------")#时间统计c ...

  4. 高级数据结构——海量数据(位图,布隆过滤器)

    目录 位图 位图介绍 位图代码实现 布隆过滤器 布隆过滤器介绍 布隆过滤器代码实现 布隆过滤器的优缺点 海量数据相关题目 位图 位图介绍 位图(bitmap),适用于存储海量,非负整数,不重复的数据. ...

  5. C1认证学习十四、十五(算法常识、HTML Head 头)

    C1认证学习十四.十五(算法常识.HTML Head 头) 文章目录 C1认证学习十四.十五(算法常识.HTML Head 头) 十四(算法常识) 任务背景 任务目标 查找算法 1.顺序查找 2.二分 ...

  6. 排序算法(五)——堆排序算法详解及Python实现

    本文目录 一.简介 二.算法介绍 三.代码实现 排序算法系列--相关文章 一.简介 堆排序(Heap Sort)算法,属于选择排序类,不稳定排序,时间复杂度O(nlogn). 堆排序由Floyd和Wi ...

  7. 计算机导论算法设计,计算机导论精品PPT-第五章 算法与程序设计.ppt

    <计算机导论精品PPT-第五章 算法与程序设计.ppt>由会员分享,可在线阅读,更多相关<计算机导论精品PPT-第五章 算法与程序设计.ppt(52页珍藏版)>请在人人文库网上 ...

  8. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-AVL树(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  9. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

最新文章

  1. 自动化测试的优势和局限性有哪些
  2. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
  3. APM - Prometheus监控系统初探
  4. 基础加强:反射和注解
  5. jquey(判断文本框输入的网址链接是否符合规则)
  6. linux安装mysql5.6.14_(四)Zabbix_linux安装mysql5.6
  7. pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
  8. Python——(Anaconda+PyCharm)Youki的Python环境配置笔记(Ubuntu+Windows)~
  9. AIR 文件系统概要
  10. Java项目:SSM网上超市购物商城管理系统
  11. ubuntu 14.04 安装 minidwep-gtk, aircrack-ng, reaver 搭建抓包环境
  12. 双系统下Ubuntu完整卸载
  13. python csv写文件,用Excel打开中文乱码解决
  14. nginx的配置优化
  15. 解决warning: #1296-D: extended constant initialiser used告警
  16. Java final String类的详细用法还有特性说明,自己也在学习.
  17. [转帖]三星F488E的JAVA安装方法
  18. 计算机二级抽题规律,计算机二级考试抽题规律计算机二级考试题及答案.doc
  19. Real-Time Rendering——Chapter 7 Advanced Shading
  20. 图片版权保护 用这个盲水印API就够了

热门文章

  1. MATLAB2014b下运行cuda6.5安装方法及例程
  2. java+pom.xml+是什么_java – 父pom.xml的包装无效,必须是“pom”,而是“ear”
  3. pyqt5项目(计算器)
  4. 【大脑】改善记忆力的食物有哪些
  5. ACM_变形课(并查集)
  6. Django之路——6 Django的模型层(二)
  7. shell基础:多命令顺序执行与管道符
  8. Java基本语法——(用于日后复习)
  9. 8.依赖的传递、排除、冲突
  10. [原创] SQLite数据库使用清单(上)