首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:接下来将这些桶子中的数值重新串接起来,成为新的的数列:,接着再进行一次分配,这次是根据十位数来分配:则一直持续进行以上的动作直至最高位数为止。
public static void radixSort(int[] array) {
int index=0;
for(int i=0;i<array.length;i++){
int length=String.valueOf(array[i]).length();
if(length>index){
index=length;
}
}
System.out.println(index);
//也可通过先找到最大值,最后转成string获取长度的方法
/*List<Integer> list=new ArrayList<Integer>();
List<Integer> list2=new ArrayList<Integer>();*/
List<ArrayList<Integer>> list=new ArrayList<ArrayList<Integer>>();
for(int i=0;i<10;i++){
list.add(new ArrayList<Integer>());
}
//按照各个位数进行排序
for(int i = 0;i < index;i++){
for(int m=0;m<array.length;m++){
int a=array[m]/pow(i);
int b = a % 10;
list.get(b).add(array[m]);
}
System.out.println(list);
// 排序
int n=0;
for(ArrayList<Integer> arrayList : list){
if(arrayList.size() != 0){
for(Integer inner : arrayList){
array[n]=inner.intValue();
n++;
}
arrayList.clear();
}
}
System.out.println("--------"+Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
}