位图法排序

文件包含10000000个整数,对其排序,内存不够10000000*4 B,解决办法bitmap 只需10000000bit,节省32倍空间

 

package com.java.ly2011.June;

/**
 * 假设n个整数 需要 n*4B=n*4*8b=32n bit
 * 用位图法只需要n bit
 * 节省空间4*8倍
 * @author Acer
 *
 */
public class BitMapSort {
 
 public static void main(String[] args) {
  //这个数组就是位图
  int[] bitMap = new int[1+N/IntBit];//计算存储Nbit位所需的int数组大小
  int[] array = new int[]{1,10,1000,100000, 100, 2, 10000, 9999, 4567, 78902};
  bitsort(array, bitMap);
 }
 
 private static int IntBit = 32; //一个整形变量32bit
 private static int SHIFT = 5;
 private static final int N = 10000000;//这么多个数也就需要这么多bit位
 

 
 public static void initBitMap(int[] bitMap){
  for (int i = 0; i < bitMap.length; i++) {
   bitMap[i]=0;
   if(bitMap[i]!=0x00){
    System.out.println("!=");
   }
  }
 }
 
 public static void addToBitMap(int i ,int[] bitMap){
  bitMap[i>>SHIFT] |= (1<<i);//位或,添加新的位信息的同时也要保存好老的信息,不能直接等于(后面覆盖前面的)
 }
 
 public static boolean isInBitMap(int i , int[] bitMap){
  boolean result= false;
  result = ( ( bitMap[i>>SHIFT]&(1<<i) ) == (1<<i) );
  return result;
 }
 
 public static void bitsort(int[] array ,int[] bitMap){
  initBitMap(bitMap);
  for (int i = 0; i < array.length; i++) {
   addToBitMap(array[i], bitMap);
  }
  for (int i = 0; i < N; i++) {
   if(isInBitMap(i, bitMap)){
    System.out.println(i);
   }
  }
  
  
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值