为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2021-11-03 16:52:31
我正在使用 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语句来测试这些,但它们也显示相同的数字。
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

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


查看完整回答
反对 回复 2021-11-03
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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

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

            j--;

        }

错误在这里。插入列表[j + 1] = 插入列表[j]


在第一次执行时,j + 1 = i,它会改变insertList[i]的值


它会影响你的病情。


insertionList[j] > insertionList[i]

所以应该改为临时变量。


查看完整回答
反对 回复 2021-11-03
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-03
  • 3 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信