/**
* 桶排序
*/
@Test
public void bucketSort(){
int[] array = {5,6,7,8,9,1,2,3,5,6,7,8,9};
buckerSort(array);
System.out.println(Arrays.toString(array));
}
public void buckerSort(int[] array){
//构造桶
int n = array.length;
List<ArrayList<Integer>> Blist = new ArrayList<ArrayList<Integer>>(n);
for (int i=0;i<n;i++) {
Blist.add(new ArrayList<Integer>(5));
}
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
for (int item:array){
max=Math.max(max,item);
min=Math.min(min,item);
}
for (int i:array
) {
int length = array.length;
//下标计算
int index=(int)((i-min)/(max-min+1.0)*length);
Blist.get(index).add(i);
}
//桶内排序
for(int i=0 ;i<Blist.size();i++){
Collections.sort(Blist.get(i));
}
int j=0;
//合并元素
for (ArrayList<Integer> items:Blist
) {
for (int item:items){
array[j++]=item;
}
}
}