zoukankan      html  css  js  c++  java
  • 排序算法-基数排序(Java)

    package com.rao.sort;
    
    import java.util.*;
    
    /**
     * @author Srao
     * @className RadioSort
     * @date 2019/12/10 18:17
     * @package com.rao.sort
     * @Description 基数排序
     */
    public class RadioSort {
    
        /**
         * 基数排序
         * @param arr
         * @return
         */
        public static int[] radioSort(int[] arr){
            //1.找出最大值
            int n = arr.length;
            int max = arr[0];
            for (int i = 1; i < n; i++) {
                if (max < arr[i]){
                    max = arr[i];
                }
            }
    
            //2.求出对大值的位数
            int num = 1;
            while (max / 10 > 0){
                num++;
                max /= 10;
            }
    
            //3.创建桶
            List<LinkedList<Integer>> bucketList = new ArrayList<>(10);
    
            //4.初始化桶
            for (int i = 0; i < 10; i++) {
                bucketList.add(new LinkedList<>());
            }
    
            //5.把每个数放到对应的桶当中
            for (int i = 1; i <= num; i++){
                for (int j = 0; j < n; j++) {
                    int index = (int) ((arr[j]/Math.pow(10, i-1)) % 10);
                    bucketList.get(index).add(arr[j]);
                }
    
                //6.把桶中的数输出到原数组
                int k = 0;
                for (int j = 0; j < 10; j++){
                    for (Integer integer : bucketList.get(j)) {
                        arr[k] = integer;
                        k++;
                    }
                    //清除桶中的元素
                    bucketList.get(j).clear();
                }
            }
        return arr;
        }
    
        public static void main(String[] args) {
            int[] arr = new int[]{3,6,2,5,9,1,0,8};
            System.out.println(Arrays.toString(arr));
            arr = radioSort(arr);
            System.out.println(Arrays.toString(arr));
        }
    }

      基数排序是按照个位,十位,百位。。。这种顺序来排序的。

      1.先比较数的个位,按照不同的大小放在10个桶里面,然后把桶中的数返回给原数组。

      2.然后比较十位,按照十位的大小把所有的数放在0-9这10个桶里面,然后把桶中的数返回给原数组。

      3.以此类推,在比较完最高位之后,数组中的数就是有序的了。

      

  • 相关阅读:
    AX 2012 Security Framework
    The new concept 'Model' in AX 2012
    How to debug the SSRS report in AX 2012
    Using The 'Report Data Provider' As The Data Source For AX 2012 SSRS Report
    Deploy SSRS Report In AX 2012
    AX 2012 SSRS Report Data Source Type
    《Taurus Database: How to be Fast, Available, and Frugal in the Cloud》阅读笔记
    图分析理论 大纲小结
    一文快速了解Posix IO 缓冲
    #转载备忘# Linux程序调试工具
  • 原文地址:https://www.cnblogs.com/rao11/p/12018451.html
Copyright © 2011-2022 走看看