bitmap排序
阿新 • • 發佈:2017-05-14
出現的次數 一個數 put 記錄 div 長度 創建 name cte
利用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 }
bitmap排序