排序算法-基数排序(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.以此类推,在比较完最高位之后,数组中的数就是有序的了。