首页 > 解决方案 > 我在java中练习插入排序,但是当我在内部循环中用++j替换j+1时,它就卡在那里了

问题描述

当我用 ++j 替换 j+1 时,它陷入了一个无限循环,既不递增也不递减 public class InsertionSort {

public static void main(String[] args) {
    int[] arr= {5,7,6,4,8,9,3,1,2};
    int n = arr.length;
    for(int i = 1 ; i < n ; i++) {
        int j = i-1;
        int key = arr[i];
        while(j>=0&&key<arr[j]) {
            arr[j+1]=arr[j--]; // ***Working Fine***
        }
        arr[++j]=key;
    }
    for (int i : arr) {
        System.out.print(i+" ");
    }


  } 
 }

卡在下面的代码中

public class InsertionSort {

public static void main(String[] args) {
    int[] arr= {5,7,6,4,8,9,3,1,2};
    int n = arr.length;
    for(int i = 1 ; i < n ; i++) {
        int j = i-1;
        int key = arr[i];
        while(j>=0&&key<arr[j]) {
            arr[++j]=arr[j--];// ***Stucked***
        }
        arr[++j]=key;
    }
    for (int i : arr) {
        System.out.print(i+" ");
    }
    }

}

标签: javainsertion-sort

解决方案


这意味着无限卡住。在 j+1 的第一个示例中,执行 j+1 时 j 的值不会增加。

while(j>=0&&key<arr[j]) {
        arr[j+1]=arr[j--]; // value of J is not incremented, it's actually decremented by j--.
    }

在 ++j 的第二个示例中,执行了两个操作。

操作一:

arr[++j] // This operation increments the value of j

操作2:

arr[j--] // This operation decrements the value of j

在同一行中,您正在递增和递减 j 的值。因此 j 的值永远不会是 0 并且它陷入了无限循环。希望这能澄清问题。


推荐阅读