首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java插入排序

Java插入排序
EN

Stack Overflow用户
提问于 2021-03-02 12:46:52
回答 3查看 50关注 0票数 0

这是我在学习AP计算机科学时遇到的一种在Java中执行插入排序的方法:

代码语言:javascript
复制
public static void insertionSort(int[] x)
{
    for (int i=1;i=0)
        {
            x[j+1]=x[j];
            j--;
        }
        x[j+1]=temp;
    }
}

从逻辑上讲,我认为代码是正确的。但是,当我尝试使用以下代码使用该方法对列表进行排序时:

代码语言:javascript
复制
public static void main(String[] args)
{
    int[] numList ={9,3,12,765,23};
    insertionSort(numList);
    for (int num:numList)
    {
     System.out.println(num);
    }
}

我得到了以下异常:线程"main“中的异常: java.lang.ArrayIndexOutOfBoundsException: Index -1超出了长度为5的界限

这里的问题是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-02 12:54:58

您遇到了评估顺序问题。你的情况(

)是正确的,但由于您编写它们的顺序,

被评估为与

在它与0进行比较之前。将您的条件反转为

来解决。

多亏了短路评估(

https://en.wikipedia.org/wiki/Short-circuit

_

评估

)、

将不会被评估,因为

是错误的。

票数 0
EN

Stack Overflow用户

发布于 2021-03-02 12:53:59

使用

票数 0
EN

Stack Overflow用户

发布于 2021-03-02 12:56:46

在insertionSort方法的while循环中,语句应该是这样的

代码语言:javascript
复制
while (j >= 0 && x[j] > temp)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66433487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档