packagemain.java.com.LiKou.arithmetic;importjava.util.Arrays;publicclassRadixSort{publicstaticvoidmain(String[] args){int[] arr =newint[]{32,21,1,7,890,784,23,5,78,33};redixSort(arr);System.out.println(Arrays.toString(arr));}publicstaticvoidredixSort(int[] arr){//存数组中最大的数字int max =Integer.MIN_VALUE;for(int i =0; i < arr.length; i++){if(arr[i]> max){
max = arr[i];}}//计算最大数字是几位数int maxLength =(max +"").length();//数字+""就变成了字符串,就可以使用字符串的相应方法了//用于临时存储数据的数组int[][] temp =newint[10][arr.length];//用于记录在temp中相应的数组中存放数字的数量int[] counts =newint[10];//根据最大长度的数来决定比较的次数for(int i =0, n =1; i < maxLength; i++, n*=10){//n用来求每轮对应的位数//把每一个数字分别计算余数for(int j =0; j < arr.length; j++){//计算余数int ys = arr[j]/ n %10;//把当前遍历的数据放入指定的数组中
temp[ys][counts[ys]]= arr[j];//记录数量
counts[ys]++;}//记录取得元素需要放的位置int index =0;//把数字取出来for(int k =0; k < counts.length; k++){//记录数量的数组中,当前余数数量不为0的时候if(counts[k]!=0){//循环取出元素for(int l =0; l < counts[k]; l++){//取出元素
arr[index]= temp[k][l];//记录下一个元素
index++;}//把数量置为零
counts[k]=0;}}}}}