public static void insertionSort(int[] data) {
for (int i =0; i < data.length; i++) {
int current = data[i];
int j = i-1;
while (j >=0 && data[j] >= current) {
data[j+1] = data[j];
j--;
}
data[j+1] = current;
}
}
while(j> = 0&amp;&amp; data [j]&gt; = current)这一行应首次在data [-1]时抛出边界的数组索引。我不明白为什么不这样做。请有人帮忙 谢谢 Ashok Pappu
答案 0 :(得分:1)
如果可以更早地满足条件,那么这些布尔表达式永远不会被完全评估。
所以...在你的情况下,j >= 0
为false
而false && ???
始终为false
,第二部分不需要进行评估。这就是永远不会调用data[-1]
的原因。
您可以对null
检查使用相同的原则,例如
if (object != null && object.isSomething())
答案 1 :(得分:0)
如果while
子句包含多于1个表达式,由&&
分割,则它们将逐个执行。这样做是为了提高性能。
即首先在您的代码j >= 0
中进行检查。如果j < 0
,则为假。因此,无论第二个表达式如何,循环都将被中断。