查看下面的代码,第一次迭代是不是意味着i = 0且j = 0-1?为什么没有错误?我认为插入排序假设从数组/右侧的末尾开始。这段代码是如何实现的?
class stevee {
public static void main(String[] args) {
int A[] = {2,1,9,8,12};
new stevee().sort(A);
System.out.println(Arrays.toString(A));
}
public void sort(int[] data) {
for (int i=0; i<data.length; i++) { //access each element one by one
int current = data[i]; //
int j = i-1;
while (j >= 0 && data[j] > current) {
data[j+1] = data[j];
j--;
}
data[j+1] = current;
}
}
}
答案 0 :(得分:0)
插入排序在大多数示例中都是最终的。但为什么不能从另一方面起作用呢? '正确'和'左'只是帮助条款。插入排序通常用手中的一组卡来解释。你开始把它们放在哪一方是否重要?
并且没有错误原因while
也适用于if
,j < 0
- &gt;条件未达到 - &gt;阻止未执行。在while条件下你有&&
因此两个表达式都必须为true,如果不是,则执行第二次评估没有意义
答案 1 :(得分:-1)
这种情况的条件是:while (j >= 0