基数排序是根据个位、十位......排序的方式,最好可达O(n)。
本例通过余数获得位上数字的方法效率太低。
public static int[] data = {3,7,8,0,9,5,4,1,6,2};
public static void sort(int[] number, int d) {
int k=0;
int n=1;
int m=1;//控制键值排序依据在哪一位
int[][] temp = new int[number.length][number.length];
int[] order = new int[number.length];
while(m <= d) {
for(int i = 0; i < number.length; i++) {
int lsd = ((number[i] / n) % 10);
temp[lsd][order[lsd]] = number[i];
order[lsd]++;
}
for(int i = 0; i < d; i++) {
if(order[i] != 0)
for(int j = 0; j < order[i]; j++) {
number[k] = temp[i][j];
k++;
}
order[i] = 0;
}
n *= 10;
k = 0;
m++;
}
}
public static void main(String[] args) {
sort(data, 10);
System.out.println(Arrays.toString(data));
}
未完,待春季后再研究通过位运算获得位上数的方法吧。