0

我已经给这个算法时间,但仍然无法弄清楚我在哪里做错了什么。任何人都可以帮助我解决“基数排序”的逻辑,如果我使用以下代码做得正确,那么请帮助我弄清楚为什么我会在 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] + " ");
    }
4

1 回答 1

0

在尝试将部分排序的数组转移到新数组之前打印 tempArray 的内容以查看它的内容。arr[] 只能保存 7 个值。tempArray 有超过 7 个大于 0 的值。因此,您试图用超过 7 个数字填充 arr[]。

于 2014-02-26T17:36:36.540 回答