通义 插入排序(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)(原地排序)。
  • 稳定:相同元素的相对位置不会改变。
相关推荐
草履虫建模16 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq18 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq18 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
qq_2975746718 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
爱吃rabbit的mq19 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
(❁´◡`❁)Jimmy(❁´◡`❁)20 小时前
Exgcd 学习笔记
笔记·学习·算法
YYuCChi20 小时前
代码随想录算法训练营第三十七天 | 52.携带研究材料(卡码网)、518.零钱兑换||、377.组合总和IV、57.爬楼梯(卡码网)
算法·动态规划
消失的旧时光-194320 小时前
第十三课:权限系统如何设计?——RBAC 与 Spring Security 架构
java·架构·spring security·rbac
不能隔夜的咖喱20 小时前
牛客网刷题(2)
java·开发语言·算法
VT.馒头20 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript