插入排序代码中的错误

时间:2012-12-08 15:44:49

标签: java sorting

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

我之前用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

有人解释我错在哪里?

1 个答案:

答案 0 :(得分:4)

问题在于您的验证时间

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

您必须在i

之前检查A[i]
while(i >= 0 && A[i] > key)

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

更多信息: