桶排序
桶排序
Page content
import java.util.Scanner;
/**
* @program: DSClassDesign
* @description: 72:桶式排序
* @author: YuanChangYue
* @TestData 6634 9796 435 1405 6123 10001 11459 12018 10372 19874 12860 11326 7096 30205 27010
* 6634,9796,435,1405,6123,10001,11459,12018,10372,19874,12860,11326,7096,30205,27010
* @create: 2019-06-18 11:49
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] arrays = new int[15];
for (int i = 0; i < 15; i++)
arrays[i] = in.nextInt();
in.close();
barrelSort(arrays);
}
/**
* 进行桶排序
*
* @param arr 排序的数组
*/
private static void barrelSort(int[] arr) {
int[][] bucket = new int[10][arr.length];
int[] bucketEleCount = new int[arr.length];
int max = arr[0];
for (int anArr : arr) {
if (max < anArr)
max = anArr;
}
int len = (max + "").length();
//6634 9796 435 1405 6123 10001 11459 12018 10372 19874 12860 11326 7096 30205 27010
for (int m = 0, n = 1; m < len; m++, n *= 10) {
for (int anArr : arr) {
int numberOfDigits = anArr / n % 10;
bucket[numberOfDigits][bucketEleCount[numberOfDigits]] = anArr;
bucketEleCount[numberOfDigits]++;
// System.out.print(anArr + "--" + numberOfDigits + "-" + bucketEleCount[numberOfDigits] + " \n");
}
// System.out.println(bucketEleCount.length);
int index = 0;
for (int j = 0; j < bucketEleCount.length; j++) {
// System.out.println(bucketEleCount[j]);
if (bucketEleCount[j] != 0) {
for (int k = 0; k < bucketEleCount[j]; k++) {
arr[index++] = bucket[j][k];
}
}
bucketEleCount[j] = 0;
}
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
}
}
}