bitmap排序

时间:2014-10-03 02:24:33   收藏:0   阅读:198

利用char数组模拟bitmap排序。bitmap可以用来对数组的查重,也可用来排序,时间复杂度较为可观。

public class BitmapSort {

	public static void bitmapsort(int[] num){
		if(num==null)
			return;
		int max = num[0];
		//找出最大的数,以确定位图数组的大小
		for(int i = 0 ; i<num.length ; i++){
			max = max>num[i]?max:num[i];
		}
		//位图数组长度
		int len = max/Character.SIZE + (max%Character.SIZE==0?0:1);
		//创建位图数组,采用char类型即可
		char[] sort = new char[len];
		//记录每个数出现的次数
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		//开始统计
		for(int i = 0 ; i < num.length ; i++){
			int index = num[i]/Character.SIZE;
			sort[index] = (char)(sort[index]|(0x01<<num[i]%Character.SIZE));
			if(map.containsKey(num[i]))
				map.put(num[i],map.get(num[i])+1);
			else
				map.put(num[i], 1);
		}
		
		System.out.println(map.size());
		int index = 0 ;
		//得出排序结果
		for(int i = 0 ;i < sort.length ;i++){
			for(int j = 0 ; j < Character.SIZE ; j++){
				int tmp = sort[i]&(0x01<<j);
				if(tmp > 0){
					int number = i*Character.SIZE+j;
					int count = map.get(number);
					while(count>0){
						num[index++] = number;
						count--;
					}//while
				}
			}//for
		}//for
	}


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!