好的,听我说完.这是我的插入排序代码.
for (int i = 0; i < arr.length; i++) {
T curr = arr[i];
int i2 = i - 1;
// if (i2 == -1) {
// System.out.println("yes");
// break;
// }
while (i2 >= 0 && comparator.compare(arr[i2], curr) > 0) {
arr[i2 + 1] = arr[i2];
i2--;
}
arr[i2 + 1] = curr;
}
所以,到目前为止,我
if (i2 == -1) {
sout("yes");
break;
}
因为我想跳过迭代,其中i2显然等于-1,因此对数组没有任何影响,因为第一次迭代什么都不做,并且将第一个元素保持在数组的0位置,因为插入排序正是这样工作的.
现在,我不太确定到底发生了什么,因为正如前面提到的if语句被注释掉一样,该算法完全按照预期工作.BUT,当我取消注释时,算法失败.
我不明白的是,注释掉它,或者根本不包括这个if语句,是如何导致算法失败的,因为不管怎样,当i2==-1时,就我所知,实际上对算法没有影响,因为,当i2为-1,并且省略了所描述的if语句时,while循环不会执行,而arr[i2+1]=curr语句会执行,但它只会保持第一个元素在其位置上,而if语句的存在正是如何保持第一个元素在其位置上的,因为它打破了循环,并且不会改变任何东西.
我不确定我是否完全疯了,是否遗漏了一个理智的人无法解释的清晰信息,但我确实看不到省略或包含所描述的if语句会改变代码的任何方面,特别是因为在for循环的第一次迭代中i2只会是-1.
非常感谢你.