如下图是学校教的基本插入排序算法。如果更改 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/