为什么我无法在 Insertionsort Coded java 中获得输出

Why i am not able to get output in Insertionsort Coded java

我在执行 InsertionSort 时无法获得输出

package app;

public class InsertionSortDemo {

    public static void  insertionsort1(int A[]) {
        int i,j,v;
        for(i=2;i<=A.length-1;i++) {
            v=A[i];
            j=i;
            while(A[j-1]>v && j>=1) {
                A[j]=A[j-1];
                j--;
            }
            A[j]=v;
        }
    }

    public static void main(String s[]) {
        int ar[]={6,8,1,4,5,3,7,2};
        insertionsort1(ar);
    }
}

显示的输出:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at app.InsertionSortDemo.insertionsort1(InsertionSortDemo.java:11)
at app.InsertionSortDemo.main(InsertionSortDemo.java:23)

问题出在这里:

while(A[j-1]>v && j>=1)

Java 中的条件从左到右求值。因此,当j的值为0时,您将访问A[-1],从而导致异常。

只需更改验证 while 循环的方式:

while(j>=1 && A[j-1]>v)