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

来源:https://www.cnblogs.com/rao11/p/12018451.html