java - 我在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+" ");
}
}
}
解决方案
这意味着无限卡住。在 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 并且它陷入了无限循环。希望这能澄清问题。
推荐阅读
- eclipse - 尝试安装最黑暗的主题后如何在 Ubuntu 上修复 Eclipse?
- reactjs - 使用 Firestore 快照侦听器接收 React 中的聊天列表
- vue.js - 尝试动态创建配置屏幕输入到创建相同输入集的 V-For
- javascript - 除了这个
- python - paho.mqtt.python 无法传递用户名和密码
- latex - TexStudio - 我的引文出现奇怪的字符
- snowflake-cloud-data-platform - 将变量传递给雪花过程
- java - 如何配置最新的 Spring Boot 应用程序以在启动时运行单元测试
- python-3.x - 如何删除我的 Cartopy/Matplotlib 图周围的框架
- html - 一些 CSS 代码无法正常工作