Java 插入排序代码混淆顺序
看看下面的代码,第一次迭代不是意味着i=0和j=0-1吗?为什么没有错误?我认为插入排序应该从数组的末尾/右侧开始。这段代码是如何实现的Java 插入排序代码混淆顺序,java,Java,看看下面的代码,第一次迭代不是意味着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[] da
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;
}
}
}
stevee类{
公共静态void main(字符串[]args){
int A[]={2,1,9,8,12};
新史蒂文()排序(A);
System.out.println(Arrays.toString(A));
}
公共无效排序(int[]数据){
对于(int i=0;i=0&&data[j]>当前){
数据[j+1]=数据[j];
j--;
}
数据[j+1]=当前值;
}
}
}
这种情况有一个条件:while(j>=0
插入排序在大多数示例中从末尾开始工作。但是为什么从另一端不起作用呢?“右”和“左”只是有用的术语。插入排序通常是用手上的一组卡片来解释的。从哪一侧开始放置它们重要吗
没有错误原因,while
也可以作为if
,j<0
->条件未满足->块未执行。在while条件下,您有&&
,因此两个表达式都必须为true,如果第一个表达式不为true,则执行第二个表达式的求值是没有意义的,因为java使用延迟求值,所以如果第一个部分为f也不检查其余部分(对于&&运算符)