当前位置: 首页 > news >正文

插入排序:原理与优化全解析

一、核心原理

把数组分为已排序区间未排序区间从头开始,依次把未排序区间的第一个元素,向前插入到已排序区间的合适位置。类比:打牌摸牌,摸到一张往手里有序牌堆里插

二、算法流程

  1. 默认第 0 个元素是已排序区间;
  2. 从第 1 个元素开始作为当前待插入元素;
  3. 向前遍历已排序元素,比当前值大的向后挪一位
  4. 找到空位,把当前元素插入;
  5. 循环直到全部有序。

三、时间复杂度

  • 最好情况(数组已有序):O(n)
  • 最坏 / 平均情况(逆序):O(n²)
  • 空间复杂度:O(1)原地排序

四、稳定性

稳定排序相等元素相对位置不会改变。

五、适用场景

  1. 数据接近有序时效率极高;
  2. 小规模数据排序;
  3. 归并 / 快速排序的底层小规模子数组常改用插入排序。

六、基础版插入排序 C++ 代码

cpp

#include <iostream> #include <vector> using namespace std; // 基础插入排序 void insertSort(vector<int>& arr) { int n = arr.size(); for (int i = 1; i < n; ++i) { int cur = arr[i]; // 当前待插入元素 int j = i - 1; // 向前挪元素 while (j >= 0 && arr[j] > cur) { arr[j + 1] = arr[j]; j--; } // 插入到正确位置 arr[j + 1] = cur; } } int main() { vector<int> a = {5,2,4,6,1,3}; insertSort(a); for (auto x : a) cout << x << " "; return 0; }

七、优化:二分插入排序

普通插入是逐个向前比较,可以用二分查找找插入位置,减少比较次数;但移动元素开销不变,时间复杂度仍O(n²)

cpp

// 二分查找找插入位置 int binarySearch(vector<int>& arr, int left, int right, int val) { while (left <= right) { int mid = (left + right) / 2; if (arr[mid] > val) right = mid - 1; else left = mid + 1; } return left; } // 二分插入排序 void binaryInsertSort(vector<int>& arr) { int n = arr.size(); for (int i = 1; i < n; ++i) { int cur = arr[i]; int pos = binarySearch(arr, 0, i - 1, cur); // 元素后移 for (int j = i; j > pos; --j) { arr[j] = arr[j - 1]; } arr[pos] = cur; } }

八、关键知识点总结

  1. 原理:将数组分已排序 / 未排序区间,逐个把元素插入已排序区间合适位置。
  2. 复杂度:最好 O (n),平均 / 最坏 O (n²),空间 O (1)。
  3. 稳定性:稳定
  4. 特点:
    • 原地排序、实现简单;
    • 近有序数据极快;
    • 大数据量不适合,平方级复杂度。
  5. 优化方向:二分插入减少比较次数,不改变时间复杂度量级。
http://www.jsqmd.com/news/796307/

相关文章:

  • 集群命令组
  • CANoe与外部程序交互:基于FDX协议的跨语言数据交换实战
  • 2026年4家高低温真空电机厂家对比:半导体锂电选型看这篇 - 速递信息
  • 【案例】昆山璟赫机电工程有限公司无锡哲讯智能|SAP全链路数字化管理,赋能高端流体系统工程高质量发展
  • 逆向实战:绕过MFC程序的“万次点击”验证机制
  • 2026年公众号编辑器挑选全攻略:从入门到精通 - 行业产品测评专家
  • 2026无人船品牌技术实力横向对比:澄峰科技、云洲、华测、欧卡智舶等厂商产品谱系与性能参数全览 - 品牌推荐大师1
  • HoRain云--PHP包含文件全解析
  • 快速变现!天猫超市购物卡回收技巧揭秘 - 团团收购物卡回收
  • 2026年无锡充电桩运营系统与社区生态物联解决方案深度横评 - 企业名录优选推荐
  • 2026年无锡充电桩运营系统与江苏社区充换电SaaS平台深度横评 - 企业名录优选推荐
  • 5分钟掌握AI图像分层:layerdivider完整使用指南
  • 别再写if-else了!Spring Boot参数校验用@Validated和@Pattern,这10个正则表达式直接抄
  • AI提示词汇总
  • 多工况金属管浮子流量计主流厂家盘点:防腐、卫生与微小流量领域的硬核较量 - 品牌推荐大师1
  • 归并排序:分治思想的经典应用
  • 2026年GEO实战复盘:这10家服务商如何帮客户拿下AI搜索高地? - 品牌2025
  • 2026年浙江二手线路板设备回收处置全景指南:从成本困局到产能升级的正确打开方式 - 年度推荐企业名录
  • 西安不干胶标签定制厂家排名2026:规上工厂产能对比与快印代工选型建议 - 优质企业观察收录
  • 无锡木木金银回收:滨湖专业的黄金回收找哪家 - LYL仔仔
  • 终极macOS菜单栏管理指南:用Ice告别杂乱界面
  • 5分钟掌握跨平台歌词同步:开源工具终极指南
  • 免费医学影像转换神器:dcm2niix完整使用指南
  • 构建开源流媒体实时告警系统:从事件驱动架构到OBS集成实战
  • 别再只用fswebcam拍照了!用树莓派+罗技C310打造你的简易监控系统(附定时抓拍脚本)
  • 江西省青蜂环保:赣州四害防治公司有哪些 - LYL仔仔
  • 天猫购物卡回收指南,轻松变现省心又快捷 - 团团收购物卡回收
  • Honey Select 2终极增强指南:一键解锁完整游戏体验的完整解决方案
  • 2026年泸州老酒回收机构哪家好 主打透明交易与专业鉴定 适配各类老酒变现需求 - 深度智识库
  • 三分钟带你读懂什么是:二分查找算法