算法-插入排序算法之直接插入排序
算法描述#
直接插入排序算法描述如下: 设线性序列是{a0,a1,...ai-1,ai,...,an-1}。
- 第
i (1 <= i < n)
趟,设前 i 个元素构成的{a0,a1,...,ai-1}子序列是排序的,将元素 ai 插入 {a0,a1,...,ai-1} 的适当位置,使插入后的子序仍然是排序的,ai 的插入位置由关键字比较大小确定的。 - 重复执行 1,n个元素共需进行
n - 1
趟排序,每趟将一个元素 ai 插入前面的子序列。区别两个关键字相同元素,其中 {} 表示已排序子列。
时间复杂度 平均情况:O(n^2)
最坏情况:O(n^2)
,该情况出现在原序列为逆序情况
最好情况:O(n)
,出现在已经为升序排列的情况,每次之比较一次即可,共 n - 1 次循环,故为 n - 1
稳定性:稳定
算法实现#
/**
* 插入排序
* @param arr
* @param orderBy [asc 升序,desc降序]
*/
public static void sort(int[] arr, String orderBy) {
for (int i = 1; i < arr.length; i++) { // n - 1 趟,依次向前插入 n - 1 个数
int x = arr[i], j; // 每趟将arr[i]插入到前面的子序列中
// asc 如果 x 小于前一个元素 执行循环中的代码否则结束循环
// desc 如果 x 大于前一个元素 执行循环中的代码否则结束循环
for (j = i - 1; j >= 0 && (orderBy.equals("asc") ? x < arr[j] : x > arr[j]); j--) {
arr[j + 1] = arr[j]; // 将前面较大/较小的元素向后移动
}
arr[j + 1] = x; // x 值到达插入位置
}
}
分类:
Algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)