gpt4 book ai didi

java - 为什么我们不能改变插入排序的 while 循环中语句的顺序?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:37 25 4
gpt4 key购买 nike

如下图是学校教的基本插入排序算法。如果更改 while 循环参数的顺序,则不起作用。

public static int[] insertionSort(int[] A){
for(int i =1; i<A.length;i++){
int key = A[i];
int j = i;
while(j>0&&A[j-1]>key){
A[j]=A[j-1];
j--;
}
A[j]=key;
}
return A;
}

更改后(现在代码将无法运行,它会给出 java.lang.ArrayIndexOutOfBoundsException: -1 预期):

public static int[] insertionSort(int[] A){
for(int i =1; i<A.length;i++){
int key = A[i];
int j = i;
while(A[j-1]>key&&j>0){
A[j]=A[j-1];
j--;
}
A[j]=key;
}
return A;
}

是否有任何其他方法可以实现相同的算法,以便条件循环语句的顺序无关紧要?

最佳答案

由于短路评估。

如果 && 的前半部分为假,则根本不会计算后半部分(因为结果不可能为真)。
因此,您可以编写 j > 0 && A[j - 1]...,并且 A[j - 1] 将仅在 j > 时被计算0

关于java - 为什么我们不能改变插入排序的 while 循环中语句的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24073503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com