Java实现桶排序
算法步骤:
(1)建立10个桶,每个桶大小与待排数组大小相等,同时建立一个一维数组存储每个桶中的数据个数
(2)计算出序列中的最大值,确定最大值的位数来确定要循环的次数
(3)遍历一次数组,对数据取余后放入对应的桶中,同时计数+1
(4)遍历完成后将桶中的数据依次取出放入原数组以备下一次遍历使用,同时清空计数
(5)重复(3)(4)
代码:
public static int[] radixSort(){
int[] arr = new int[]{2,1,5,9,156,58,4,485};
//建立10个桶
int[][] bucket = new int[10][arr.length];
//一维数组记录每个桶中数据的个数
int[] bucketElement = new int[10];
//最大值
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
//最大位数
int maxLength = (max + "").length();
for (int l = 0, n = 1; l < maxLength; l++, n *= 10) {
for (int i = 0; i < arr.length; i ++) {
int elementCount = arr[i] / n % 10;
bucket[elementCount][bucketElement[elementCount]] = arr[i];
bucketElement[elementCount] ++;
}
int index = 0;
for (int i = 0; i < bucketElement.length; i ++) {
if (bucketElement[i] != 0) {
for (int j = 0; j < bucketElement[i]; j ++) {
arr[index ++] = bucket[i][j];
}
}
//计数清零
bucketElement[i] = 0;
}
}
return arr;
}