我已经给这个算法时间,但仍然无法弄清楚我在哪里做错了什么。任何人都可以帮助我解决“基数排序”的逻辑,如果我使用以下代码做得正确,那么请帮助我弄清楚为什么我会在 line:arr[sortedIndex] = tempArray[j][k]; 处得到 ArrayIndexOutOfBoundsException;
int[] arr = {3,10,50,137,90,139,40};
int maxValue = arr[0], sortedIndex = 0, mode = 10, n = 1;
// Displays unsorted array
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println("\n");
// finds maximum digit
for(int i = 0; i < arr.length; i++){
if(arr[i] > maxValue){
maxValue = arr[i];
}
}
// Gets number of digits
int maxDigits = (String.valueOf(maxValue)).length();
for(int i = 0; i < maxDigits; i++){
int[][] tempArray = new int[10][arr.length];
// Transfers 1-D array value to 2-D array w.r.t baseIndex
for(int j = 0; j < arr.length; j++){
int modulus = arr[j] % mode;
int baseIndex = modulus / n;
for(int k = 0; k < tempArray[baseIndex].length; k++){
if(tempArray[baseIndex][k] == 0){
tempArray[baseIndex][k] = arr[j];
break;
}
}
}
// Shifts partially sorted array to new array
for(int j = 0; j < tempArray.length; j++){
for(int k = 0; k < tempArray[j].length; k++){
if(tempArray[j][k] > 0){
arr[sortedIndex] = tempArray[j][k];
sortedIndex++;
}
}
}
mode *= 10;
n *= 10;
}
// Displays sorted array
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}