插入排序技术的代码出错

时间:2014-02-15 05:33:29

标签: java insertion-sort

我目前一直在学习插入排序,并想出了这段代码:

public int[] Sort(int a[]){
    for(int i=1;i<a.length;i++){
        int term=a[i];
        int j=i-1;

        //Sorting
        while(j>=0 && term<a[j]){
            a[j+1]=a[j];
            j--;
        }

        a[j]=term;
    }

    return a;
}

但是当我执行此代码时,它会显示ArrayIndexOutofBoundsException。 如果我错了,请指导我。

2 个答案:

答案 0 :(得分:2)

读取堆栈跟踪表明错误发生在行

    a[j]=term;

向上看,你可以看到当j <0时,while循环结束;因此,您必须得到此错误,因为j = -1。实验表明,如果您在while和j++;

之间添加a[j]=term;,则代码可以正常运行

答案 1 :(得分:2)

根据错误状态,它显示错误在

a[j] = term

因此,如果仔细观察,可以看到while循环导致ArrayIndexOutofBoundsException。所以你可以写这样的代码:

public static int[] Sort(int a[]){
        for(int i=1;i<a.length;i++){
            int term=a[i];
            int j=i-1;

            //Sorting
            while(j>=0 && term<a[j]){
                a[j+1]=a[j];
                j--;
            }

            a[j+1]=term;
        }

        return a;
    }