java - Java 程序 - 使用 For 循环的插入排序
问题描述
我编写了一个用于插入排序的 java 程序。
public class InsertionSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[] = { 12, 11, 13, 5, 6 };
int len = arr.length;
for(int i=0;i<len-1;i++) {
for(int j=i+1;j<len;j++) {
if(arr[j] < arr[i]) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
for(int i=0;i<len;i++) {
System.out.print(arr[i]+ " ");
}
}
}
请让我知道上述程序是否正确并且是执行插入排序的正确方法。我得到了正确的输出。
解决方案
如果您尝试在 j 循环的每次迭代后使用
System.out.println(Arrays.toString(arr))
这将导致以下语句与分析作为注释 //插入排序从索引 1 处的元素开始,因为它比较数字的左侧,
并且在每次排序之后,当前值左侧的所有元素都将在之前的迭代中进行排序
[11, 12, 13, 5, 6] // correct since 11 < 12
[11, 12, 13, 5, 6] //correct since 12 < 13
[5, 12, 13, 11, 6] //5 has changed its position which is correct but also Here you can //see the position of 11 changed
[5, 12, 13, 11, 6]
[5, 12, 13, 11, 6]
[5, 11, 13, 12, 6]
[5, 6, 13, 12, 11]
[5, 6, 12, 13, 11]
[5, 6, 11, 13, 12]
[5, 6, 11, 12, 13]
试试下面的代码
public static void main(String[] args) {
int arr[] = { 12, 11, 13, 5, 6 };
int len = arr.length;
for(int i=1; i<len; i++) {
int key = arr[i];
int j = i - 1;
for ( ; (j >= 0 && arr[j] > key); j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = key;
System.out.println(Arrays.toString(arr));
}
}
它会给你下面的输出
[11, 12, 13, 5, 6]
[11, 12, 13, 5, 6]
[5, 11, 12, 13, 6]
[5, 6, 11, 12, 13]
推荐阅读
- javascript - 如何在带有多个文本字段的画布上显示用户输入和文本换行
- c# - 加载任何名称的第一张图像,解决异常错误,将丢弃的图像复制到文件夹
- html - 是否可以在放大的动态背景图像上放置固定元素(按钮、问候语)?
- docker - 如何在 docker-compose 文件中引用 traefik v2 的自签名 SSL 证书?
- python - 熊猫找到合并的逆
- php - 脚本无法识别文件扩展名以在 php 中上传 pdf
- python - AttributeError: 'list' 对象在将 DF 附加到列表时没有属性'to_excel',并将这些 DF 的保存与 openpyxl 连接到聚合文件
- python - 如何使用主窗口自动调整 Qwidget 的大小?
- python - 如何将 C 二进制缓冲区转换为 Python 字符串中的十六进制表示?
- docker - Docker 容器不运行 crontab