位图法排序

文件包含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< }
 
 public static boolean isInBitMap(int i , int[] bitMap){
  boolean result= false;
  result = ( ( bitMap[i>>SHIFT]&(1<  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);
   }
  }
  
  
 }
}

你可能感兴趣的:(位图法排序)