代碼
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;
}
}
存在問題
目前所寫代碼只適合對大於零的數進行排序,待完善。