Java实现桶排序

public class BucketSort {

public static void main(String[] args) {
	int[] list = {1000, 192, 221, 12, 23};
	print(list);
	System.out.println();
	bucketSort(list, 10, 4);
	print(list);
}
//list:待排序数组   radix关键字取值范围   d一个数最多包含的关键字
public static void bucketSort(int[] list, int radix, int d){
	int[] temp = new int[list.length];
	//定义桶的数量
	int[] buckets = new int[radix];
	for(int i=0, rate=1;i<d;i++){
		//清空buckets进行下一轮计数
		Arrays.fill(buckets, 0);
		//将当前数组复制给临时数组便于操作
		System.arraycopy(list, 0, temp, 0, list.length);
		//开始判断入桶
		for(int j=0;j<temp.length;j++){
			int index = (temp[j]/rate)%radix;
			buckets[index]++;
		}
		//为元素的取出做准备
		for(int k=1;k<radix;k++){
			buckets[k] = buckets[k]+buckets[k-1];
		}
		//通过上述循环 就可以知道当前要插入的元素子数组中应该排第几
		for(int r=temp.length-1;r>=0;r--){
			int radex = (temp[r]/rate)%radix;
			list[--buckets[radex]] = temp[r];
		}
		//准备排序十位
		rate *= radix;
	}
}
//打印数组
public static void print(int[] list){
	for(int num:list)
		System.out.print(num+" ");
}

}

posted @ 2018-05-07 22:08  Loading~  阅读(156)  评论(0编辑  收藏  举报