1 /**
2 * 位图排序
3 */
4 import java.util.Arrays;
5
6 public class Test {
7 public static void main(String[] args){
8 int[] arr = new int[]{ 3, 6, 7, 13, 1, 0, 4, 2, 9, 8, 15, 11 };
9 System.out.println(Arrays.toString(arr));
10 System.out.println("================");
11 BitSort.bitSort(arr, 15);
12 System.out.println(Arrays.toString(arr));
13 }
14 }
15
16 class BitSort{
17 /**
18 *
19 * @param arr 待排序树组
20 * @param maxValue 数组中最大值,用来确定位图数组大小
21 */
22 public static void bitSort(int[] arr, int maxValue){
23 //位图数组大小为: maxValue/8-1,因为位图从0开始
24 byte[] bitlist = new byte[maxValue / 8 + 1];
25 for(int i = 0; i < arr.length; i++){
26 //确定arr[i]所放的bitlist位置
27 int index = arr[i] / 8;
28 //arr[i]值为多少就在位图中左移多少, 通过或(|)操作来记录每个数据
29 bitlist[index] = (byte)(bitlist[index] | (0x01 << (arr[i] % 8)));
30 }
31
32 int k = 0;
33 for(int i = 0; i < bitlist.length; i++){
34 //遍历bitlist的每一个位
35 for(int j = 0; j < 8; j++){
36 if((0x01 & (bitlist[i] >> j)) == 1){
37 arr[k++] = i * 8 + j;
38 }
39 }
40 }
41 }
42 }