0

我正在尝试打印插入排序算法的步骤

我之前用 c++ 写过,效果很好,但是当我转换成 时Java,它给了我这个错误

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at insertion.insertion_sort(insertionSort.java:45)
at insertionSort.main(insertionSort.java:8)

这是我的代码:

    /* print the steps of insertion sort algorithm */

class insertionSort {

    public static void main(String[] args) {

        insertion obj = new insertion();
        obj.insertion_sort();

    } // end of main function

} // end of insertionSort class

class insertion {

    int A[] = { 5, 8, 9, 1, 0, 4, 7, 3, 6, 2 };
    final int ELEMENTS = 10;

    void printStep(int source, String destination) {
        System.out.print("move array[" + source + "]  -----> " + destination);
    }

    void printStep(int source, int destination) {
        System.out.print("move array[" + source + "]  -----> " + "array["
                + destination + "] ");
    }

    void printStep(String source, int destination) {
        System.out.print("move " + source + " -----> array[" + destination
                + "] ");
    }

    void insertion_sort() {

        int key, i;

        for (int j = 1; j < ELEMENTS; j++) {
            key = A[j];
            printStep(j, "key");
            System.out.println();
            i = j - 1;

            while (A[i] > key && i >= 0) {
                A[i + 1] = A[i];
                printStep(i + 1, i);
                System.out.println();
                i = i - 1;
            }

            A[i + 1] = key;
            printStep("key", i + 1);
            System.out.println();
            System.out.println("======================================");

        }

    } // end of insertion_sort ( )

} // end of insertion class

请有人解释我的错在哪里?

4

1 回答 1

4

问题出在您的 while 验证中

while(A[i] > key && i >= 0)

您必须先检查该iA[i]

while(i >= 0 && A[i] > key)

进一步说明:请注意,在此while循环中,您将扣除i变量的值。所以会有一段时间i小于 0,你在检查A[-1]之前检查i >=0。验证的顺序whileif句子很重要,Java 从左到右评估它们。

更多信息:

于 2012-12-08T15:49:19.220 回答