基数排序原理图:
图源菜鸟教程
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] arr = {6,4,3,8,1,6,1,76,33};
radixSort(arr);
System.out.println(Arrays.toString(arr));
}
public static void radixSort(int[] arr){
//找到数组当中的最大值
int max = arr[0];
for(int i = 0;i<arr.length;i++) {
if(arr[i]>max) {
max = arr[i];
}
}
//数组当中最大值是几位的
int maxLength = (max + "").length();
int n = 1;
for(int h = 0;h<maxLength;h++ ) {
//定义二维数组代表10个桶
int[][] bucket = new int[10][arr.length];
//定义一个数组,记录每一个桶内有多少数据
int[] bucketElement = new int[10];
//按照第n位的值放入桶内
for(int i = 0;i<arr.length;i++){
int element = arr[i] / n % 10;
bucket[element][bucketElement[element]] = arr[i];
bucketElement[element]++;
}
int index = 0;
// 外层for循环是对桶记录的遍历
for(int k = 0;k<bucketElement.length;k++) {
if(bucketElement[k] !=0) {
//将数据写回
for(int l = 0;l<bucketElement[k];l++) {
arr[index] = bucket[k][l];
index ++;
}
}
//清空桶的记录
bucketElement[k] = 0;
}
n = n * 10;
}
}
}