数据结构(五)位图算法
2016-04-20 02:01
218 查看
位图算法实现思想:
将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间。
将需要排序的数字转换为数组的下标,通过数组的下标完成对数据的排序,优点效率高,缺点浪费存储空间。
1 | public class BitMapTest { |
2 | /** |
3 | * 参数说明: |
4 | * @param buf 新定义的bit数组(int类型) |
5 | * @param value 需排序的传入数值 |
6 | * @return |
7 | * |
8 | * 功能说明: |
9 | * 将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 | } |
相关文章推荐
- 数据结构-Collection
- linux数据结构—链表
- 数据结构 ---- 链表
- 数据结构4.1--部分排序算法
- 用Doxygen和Graphviz给Contiki文档添加类图和调用图
- 重学数据结构系列之——八大排序算法
- 数据结构之循环链表
- 啊哈!算法【转】
- 菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
- 数据结构--二叉树的遍历
- 数据结构算法应用C++语言描述——(1)C++基础知识
- MySQL索引背后的数据结构及算法原理
- (转载)动态规划之背包问题(一)
- 【数据结构】二叉树的实现(如:默认成员函数、(叶子)节点数、深度、四种遍历)
- 数据结构学习安排
- 数据结构串之块链串
- 数据结构串之堆串
- 数据结构之串——顺序串
- 数据结构和算法16 之堆排序
- 数据结构和算法15 之二叉树排序