通义 插入排序(Insertion Sort)

插入排序(Insertion Sort)是一种简单直观、稳定的排序算法,适合少量数据或基本有序的序列。它的工作方式就像整理手里的扑克牌:每次从桌上拿一张牌,把它插到左手中已排好序的位置,直到所有牌都拿完。

算法步骤

  1. 把数组分为"已排序"和"未排序"两部分,初始时第一个元素视为已排序。
  2. 从未排序部分依次取出一个元素,从右向左与已排序部分的元素比较:
    • 如果已排序元素大于当前元素,就把它向右挪一位;
    • 直到找到第一个不大于当前元素的位置,把当前元素插入该空位。
  3. 重复步骤 2,直到未排序部分为空。

示例

原始数组:6, 2, 5, 8, 7

  • 第 1 轮:2 与 6 比较,2 < 6,把 6 右移,2 插到最前 → 2, 6, 5, 8, 7
  • 第 2 轮:5 与 6 比较,5 < 6,把 6 右移;再与 2 比较,5 > 2,插入中间 → 2, 5, 6, 8, 7
  • 第 3 轮:8 > 6,不动 → 2, 5, 6, 8, 7
  • 第 4 轮:7 依次与 8、6 比较,7 < 8,8 右移;7 > 6,插入 → 2, 5, 6, 7, 8
    排序完成。

特点

  • 时间复杂度:最好 O(n)(已基本有序),最坏 O(n²)(逆序),平均 O(n²)。
  • 空间复杂度:O(1)(原地排序)。
  • 稳定:相同元素的相对位置不会改变。
相关推荐
海绵宝宝转agent几秒前
2026-10-9 leetcode100刷题+面经整理
笔记·算法·面试
打工仔折腾 AI10 分钟前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
yi01111 分钟前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳12 分钟前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
Logic10124 分钟前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理
Nebula_g25 分钟前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
扶风ff31 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
yi01139 分钟前
LeetCode 15:三数之和|排序 + 双指针,如何避免重复答案?
笔记·python·算法·leetcode·双指针
Zelman44 分钟前
第06章-超节点
人工智能·后端
Raas1001 小时前
AI网关能做语义缓存吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·后端·spring