简介
上一章我们学习了 Java 选择排序算法,这一章,我们来学习插入排序算法,so,多了不说,继续老规矩,学习内容如下:
1、插入排序的定义
2、插入排序的思路
3、代码实现
1.插入排序的定义
插入排序算法:是基于某序列已经有序排列的情况下,通过一次插入一个元素的方式按照原有排序方式增加元素
2.插入排序的思路
- 默认从第2个数据开始比较。如果第2个数据比第1个小,则交换。
- 然后在用第3个数据比较,如果比前面小,则插入。否则,退出循环。
- 说明:默认将第1数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出。
执行过程中,若遇到和插入元素相等的位置,则将要插人的元素放在该相等元素的后面,因此插入该元素后并未改变原序列的前后顺序。
我们认为插入排序也是一种稳定的排序方法。
3.代码实现
package com.gongchao.boss;
/**
* description: 插入排序
* auth: zengtao
* time: 2020-12-09 18:05
**/
public class Main {
public static void main(String[] args) {
int arr[] = {9, 5, 2, 7, 4};
// 插入排序
sortInsert(arr);
}
private static void sortInsert(int[] arr) {
//插入排序
for (int i = 1; i < arr.length; i++) {
//外层循环,从第二个开始比较
for (int j = i; j > 0; j--) {
//内存循环,与前面排好序的数据比较,如果后面的数据小于前面的则交换
if (arr[j] < arr[j - 1]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
} else {
//如果不小于,说明插入完毕,退出内层循环
break;
}
// 打印排序后的数据
systemArr(arr);
}
}
}
private static void systemArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("");
}
}
运行结果
结果 vs 选择插入思路
1⃣️ 首次对比,如果小,那么就交换
结果数据:9 5 2 7 4 —> 5 9 2 7 4 正确 2⃣️
持续对比,如果后面的数据大于前面数据,则推出内循环,表示数据有序
5 2 9 7 4
2 5 9 7 4
2 5 7 9 4
2 5 7 4 9
2 5 4 7 9
2 4 5 7 9
3⃣️ 最终结果
2 4 5 7 9
经过验证,每一个步骤都是按照思路来的,而且都是正确的,so,插入排序总结完毕!
欢迎观看,Thanks !