代码
class Sort8{
//基数排序bucketSort,分为 LSD和MSD,即按最低位优先或最高位排序优先
//按个位(起)将数字装箱,进行记录
//依次按位数重复排序,直到排完;
public void bucketSort(int[] number) {
//创建10个桶
int[][] a = new int[10][number.length];
int b = maxNumber(number);
int c = getNumberTimes(b);
int d = 1;//位数
int e=0;
int n = 1;//个位
while (d <= c) {
for (int i = 0; i < number.length; i++) {
int x = (number[i] / n) % 10;
a[x][e] = number[i];
e++;
}
int k = 0;
for (int i = 0; i < 10; i++) {//桶中数放入数组
if (e >= 0) {
for (int j = 0; j < number.length; j++) {
if (a[i][j] != 0) {
number[k] = a[i][j];
k++;
e--;
}
}
}
}
n*=10;
d++;
}
}
public int maxNumber(int[] number){//获得最大值
int max=number[0];
for (int i=1;i<number.length;i++)
if(max<number[i])
max=number[i];
return max;
}
public int getNumberTimes(int maxNumber){//获得最大位数
int count=1;
int temp=maxNumber/10;
while (temp!=0){
temp=temp/10;
count++;
}
return count;
}
}
存在问题
目前所写代码只适合对大于零的数进行排序,待完善。