我在 java 中练习插入排序,但是当我在内部循环中替换 ++j 中的 j+1 时,它就卡在那里了
I was practicing insertion sort in java, but as soon as I replaced the j+1 from ++j in the inner loop it got stucked over there
当我用 ++j 替换 j+1 时,它卡在了那里,无限循环既不递增也不递减
public class 插入排序 {
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+" ");
}
}
}
这是要无限卡住的意思。
在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的第二个例子中,执行了两个操作。
操作 1:
arr[++j] // This operation increments the value of j
操作2:
arr[j--] // This operation decrements the value of j
在同一行中,您正在递增和递减 j 的值。因此 j 的值永远不会为 0,并且它陷入了无限循环。
希望这能澄清问题。
当我用 ++j 替换 j+1 时,它卡在了那里,无限循环既不递增也不递减 public class 插入排序 {
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+" ");
}
}
}
这是要无限卡住的意思。 在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的第二个例子中,执行了两个操作。
操作 1:
arr[++j] // This operation increments the value of j
操作2:
arr[j--] // This operation decrements the value of j
在同一行中,您正在递增和递减 j 的值。因此 j 的值永远不会为 0,并且它陷入了无限循环。 希望这能澄清问题。