桶排序

桶排序

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();
        }
    }

}