插入排序
插入排序
代码#
import java.util.Arrays;
public class InsertionSort {
public static void main(String[] args) {
int[] numbers = { 3, 1, 4, 2, 6, 5 };
System.out.println("排序前的数组为:" + Arrays.toString(numbers));
// 外层循环控制排序轮数
for (int i = 1; i < numbers.length; i++) {
// 临时变量存储当前要比较的值
int temp = numbers[i];
int j = 0;
for (j = i - 1; j >= 0; j--) {
if (numbers[j] > temp) {
numbers[j + 1] = numbers[j];
} else {
break;
}
}
if (numbers[j + 1] != temp) {
numbers[j + 1] = temp;
}
}
System.out.println("排序后的数组为:" + Arrays.toString(numbers));
}
}
输出效果为:
排序前的数组为:[3, 1, 4, 2, 6, 5]
排序后的数组为:[1, 2, 3, 4, 5, 6]
释义#
插入排序,一开始将第一个待排序序列看做有序序列,余下的为未排序序列。从头到尾扫描未排序序列,将所选元素与有序序列中的元素比较,插入适当位置。
以[3, 1, 4, 2, 6, 5]为例。
第一轮排序:
[3, 1, 4, 2, 6, 5] temp = 1
初始
[3, 3, 4, 2, 6, 5] temp = 1
1比3小,将3后移
[1, 3, 4, 2, 6, 5] temp = 1
第一轮结束,将temp值赋值给本来3的位置。
第二轮排序:
[1, 3, 4, 2, 6, 5] temp = 4
初始
[1, 3, 4, 2, 6, 5] temp = 4
4比3大,肯定比3之前的元素大,循环结束
第三轮排序:
[1, 3, 4, 2, 6, 5] temp = 2
初始
[1, 3, 4, 4, 6, 5] temp = 2
2比4小,将4后移
[1, 3, 3, 4, 6, 5] temp = 2
2比3小,将3后移
[1, 3, 3, 4, 6, 5] temp = 2
2比1大,结束
[1, 2, 3, 4, 6, 5] temp = 2
第三轮结束,将temp值赋值给3的位置
第四轮排序:
[1, 2, 3, 4, 6, 5] temp = 6
初始
[1, 2, 3, 4, 6, 5] temp = 6
6比4大,肯定比4之前的元素大,循环结束
第五轮排序:
[1, 2, 3, 4, 6, 5] temp = 5
初始
[1, 2, 3, 4, 6, 6] temp = 5
5比6小,6后移
[1, 2, 3, 4, 6, 6] temp = 5
5比4大,结束
[1, 2, 3, 4, 5, 6] temp = 5
第三轮结束,将temp值赋值给6的位置
五轮排序结束得到最终序列。
易知,若有N个待排序元素,共需排序N-1轮。每轮排序向前比较,直至找到合适位置为止。
总结#
插入排序是一种稳定的排序算法。
平均时间复杂度:O(n²)
最坏时间复杂度:O(n²)
最好时间复杂度:O(n)
空间复杂度:O(1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)