publicclassRadioSort{ publicstaticint[] RadioSort(int []arr){ if (arr==null||arr.length<2)return arr; int n=arr.length; int max=arr[0]; //找出最大值 for (inti=1; i <n ; i++) { if (max<arr[i])max=arr[i];
} //计算最大值是几位数 int num=1; while (max/10>0){ num++; max=max/10; } //不管多少位数字,因为最多创建10个桶,所以咋们弄十个准没错 ArrayList<LinkedList<Integer>> bucketList = newArrayList<>(10); //初始化桶 for (inti=0; i <10; i++) { bucketList.add(newLinkedList<>());
} //进行每一趟排序 for (inti=1; i <num ; i++) { for (intj=0; j <n ; j++) { //获取每个数最后第i位数 intradio= (arr[j] / (int)Math.pow(10,i-1)) % 10; //放进开始我们弄好的桶里面(对应) bucketList.get(radio).add(arr[j]);
} //因为桶里面已经有序,现在咋们进行合并放回原来的数组里面 int k=0; for (intj=0; j <10 ; j++) { for (Integer t:bucketList.get(j)){ arr[k++]=t; } //取出来合并了之后把桶清光数据 bucketList.get(j).clear();