思想
基数排序首先按照个位数的值进行装桶,个位数的相同的数装进一个桶,然后从第0个桶开始取,取到第9个桶,将数组重新装进数组,在按照这种方式对十位、百位,直到最高位进行操作。
例子
例子如下图所示:
代码
package test;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int[] A=new int[]{73,22, 93, 43, 55, 14, 28, 65, 39};
RadixSort radixSort = new RadixSort();
radixSort.radix(A, 10);
System.out.println(Arrays.toString(A));
}
// 参数d表示最高位,如果数组中所有元素的最高位是十位,那么d就是10,最高位是百位,就是100
public void radix(int [] a,int d){
int division = 1; // 对应的位数1,10,100...
int [] count = new int [10]; // 存储每个桶中的元素的个数
int [][] bucket = new int[10][a.length];// 保存每次排序之后的结果
while(division <= d){
// 存数据
for(int i=0;i<a.length;i++){
int digit = (a[i] / division) %10; // 取得对应位上的值
bucket[digit][count[digit]] = a[i];
count[digit] ++;
}
int k =0;
// 取数据
for(int i= 0;i<10;i++){
for(int j =0;j<count[i];j++){
a[k] = bucket[i][j];
k++;
}
count[i] = 0;
}
division *= 10;
}
}
}