通义 插入排序(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)(原地排序)。
  • 稳定:相同元素的相对位置不会改变。
相关推荐
Jerry26 分钟前
LeetCode 739. 每日温度
算法
小满zs1 小时前
Go语言第三章(五谷轮回)
后端·go
程序员小羊!4 小时前
集团多事业部架构下数仓分层建模规范
架构
2601_954526755 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
霸道流氓气质5 小时前
SpringBoot中通用工具类库(Utils)封装与使用实践
spring boot·后端·python
ARM|X86+FPGA工业主板厂家6 小时前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构
叩码以求索6 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
小码哥哥6 小时前
四大企业AI知识库技术架构深度对比:从设计哲学到实现差异
人工智能·架构
c238567 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法