Jun*_*aid 1 java sorting algorithm insertion-sort
如下所示是学校教授的基本插入排序算法.如果更改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;
}
Run Code Online (Sandbox Code Playgroud)
更改后(现在代码不会工作,它将给出java.lang.ArrayIndexOutOfBoundsException:-1 expection):
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;
}
Run Code Online (Sandbox Code Playgroud)
如果有任何其他方法来实现相同的算法,以便条件循环语句的顺序无关紧要?
因为短路评估.
如果a的前半部分&&
为假,则根本不会评估后半部分(因为结果不可能是真的).
因此,您可以编写j > 0 && A[j - 1]...
,并且A[j - 1]
只会评估j > 0
.