Java插入排序:“相同”变量得到不同的结果

我正在使用 Java 进行插入排序。例如,如果我有一个整数数组 {8,7,6,5,4,3,2,1},


这会给我错误的结果:7,6,5,4,3,2,1,8图片


public static int[] insertionSort(int[] list) {

    int[] insertionList = list.clone();

    for(int i = 1; i < insertionList.length; i++) {

        int temp = insertionList[i];

        int j = i - 1;

        while(j >= 0 && insertionList[j] > insertionList[i]) {

            insertionList[j + 1] = insertionList[j];

            j--;

        }

        insertionList[j + 1] = temp;

    }

    return insertionList;

}

这会给我我想要的结果:1,2,3,4,5,6,7,8图片


public static int[] insertionSort(int[] list) {

    int[] insertionList = list.clone();

    for(int i = 1; i < insertionList.length; i++) {

        int temp = insertionList[i];

        int j = i - 1;

        while(j >= 0 && insertionList[j] > temp) {

            insertionList[j + 1] = insertionList[j];

            j--;

        }

        insertionList[j + 1] = temp;

    }

    return insertionList;

}

只是想知道insertionList[i]和之间有什么不同temp。我写了两个println语句来测试这些,但它们也显示相同的数字。


拉风的咖菲猫
浏览 184回答 3
3回答

倚天杖

不同之处在于'insertionList' 在while 循环中被修改。当您将 temp 变量设置为 'insertionList[i]' 时,temp 的值在整个 while 循环中保持不变。

慕标琳琳

while(j >= 0 && insertionList[j] > insertionList[i]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insertionList[j + 1] = insertionList[j];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; j--;&nbsp; &nbsp; &nbsp; &nbsp; }错误在这里。插入列表[j + 1] = 插入列表[j]在第一次执行时,j + 1 = i,它会改变insertList[i]的值它会影响你的病情。insertionList[j] > insertionList[i]所以应该改为临时变量。

肥皂起泡泡

while(j >= 0 && insertionList[j] > insertionList[i])&nbsp;在这一行中,您正在与循环insertionList中的迭代中的第 i 个元素进行比较,此代码可能会更改所持有的值。但是当您使用变量时,对于整个迭代,此处的比较值不会改变。这就是为什么你得到不同的输出。whileinsertionList[j + 1] = insertionList[j];insertionList[i]tempinsertionList[j] > temp
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java