通义 插入排序(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)(原地排序)。
  • 稳定:相同元素的相对位置不会改变。
相关推荐
章豪Mrrey nical6 小时前
前后端分离工作详解Detailed Explanation of Frontend-Backend Separation Work
后端·前端框架·状态模式
hh随便起个名7 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
派大鑫wink7 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
程序员爱钓鱼7 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
xUxIAOrUIII8 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home8 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法
zfj3218 小时前
go为什么设计成源码依赖,而不是二进制依赖
开发语言·后端·golang
weixin_462446238 小时前
使用 Go 实现 SSE 流式推送 + 打字机效果(模拟 Coze Chat)
开发语言·后端·golang
Dingdangcat868 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
JIngJaneIL8 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端