【问题标题】:Error in Insertion Sort Technique's code插入排序技术的代码错误
【发布时间】:2014-02-15 05:33:28
【问题描述】:

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

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。 请在我错的地方指导我。

【问题讨论】:

  • 我认为你可以在这里得到的最好的教训是学习使用调试器。您可以将调试器设置为在出现异常时停止,然后观察不同变量的值。这通常有助于找出问题所在,或者至少可以为调试器寻找新的方向。

标签: java insertion-sort


【解决方案1】:

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

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;
    }

【讨论】:

    【解决方案2】:

    读取堆栈跟踪表明错误发生在线路上

        a[j]=term;
    

    向上看,可以看到while循环在ja[j]=term; 之间添加 j++;,您的代码可以工作

    【讨论】:

      猜你喜欢
      • 2013-08-11
      • 1970-01-01
      • 2018-10-31
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多