Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 插入排序代码混淆顺序_Java - Fatal编程技术网

Java 插入排序代码混淆顺序

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

看看下面的代码,第一次迭代不是意味着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;
    }
}
}
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也不检查其余部分(对于&&运算符)