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

数据结构----插入排序

一、基本思想

插入排序的核心思想:把数组分为「有序区」和「无序区」。初始状态:
第 1 个元素天然为有序区;
后面所有元素为无序区。
每一趟排序:从无序区取出第一个元素,向前扫描有序区,按照大小顺序,插入到有序区的合适位置;重复操作,直到整个数组全部转为有序区。特点:逐个插入、逐步有序,稳定排序、就地排序。


二、直接插入排序

1. 算法原理
数组下标从 i = 1 开始(默认 a [0] 有序);
暂存当前待插入元素 temp = a[i];
从有序区末尾 j = i-1 向前遍历;
若 a[j] > temp,向后移位腾出空位;
直到找到比 temp 小的位置,将 temp 插入;
i++,进入下一趟。
2. 完整代码

  1. void InsertSort(int a[], int n)

  2. {

  3. int i, j, temp;

  4. for(i = 1; i < n; i++)

  5. {

  6. temp = a[i]; // 待插入元素

  7. // 向前移位

  8. for(j = i - 1; j >= 0 && a[j] > temp; j--)

  9. {

  10. a[j + 1] = a[j];

  11. }

  12. a[j + 1] = temp; // 插入正确位置

  13. }

  14. }

3. 性能分析
最好情况(数组已有序):O(n)
最坏 / 平均情况:O(n 2 )
空间复杂度:O(1) 原地排序
稳定性:稳定(相等元素不交换相对位置)


三、折半插入排序(二分插入排序)

1. 改进思路
直接插入排序中,向前查找插入位置是顺序查找效率低;利用有序区已有序,改用折半查找快速定位插入点,减少比较次数。 仅减少比较次数,元素移动次数不变。
2. 核心流程
折半查找,快速确定待插入位置 low;
将插入位置后所有元素统一后移;
放入待插入元素。
3. 性能
比较次数:O(nlog 2 n)
移动次数:仍为 O(n 2 )
整体时间复杂度:O(n 2)稳定、原地排序


四、希尔排序(缩小增量插入排序)

1. 改进思想
直接插入在数据逆序、乱序时效率极差;希尔排序:分组 + 远距离插入先取较大增量,将数组分组,组内直接插入排序;逐步缩小增量,直至增量为 1,退化为普通插入排序。
2. 原理
设定增量 d,按下标间隔 d 分组;每组内部做直接插入排序;不断缩小 d,重复分组排序;d=1 整体有序。
3. 关键性质
时间复杂度:约 O(n 1.3 )
稳定性:不稳定(远距离交换会打乱相等元素顺序)
属于插入类排序,是直接插入的优化版本


五、插入排序共同特点总结

算法逻辑简单,易于理解、代码短;
适合数据量小、基本接近有序的序列;
直接插入、折半插入:稳定;希尔排序:不稳定;
都是就地排序,额外空间仅常数级;
数据越有序,插入排序越快。

http://www.jsqmd.com/news/717270/

相关文章:

  • real-anime-z实战教程:用‘cherry blossom’+‘soft focus background’营造日系氛围感
  • OpCore Simplify:3步轻松搞定黑苹果OpenCore EFI配置的智能工具
  • 微服务-Docker
  • 2026MCX关键任务通信哪家好?融合通信厂商推荐与核心能力盘点 - 栗子测评
  • YOLOv13实战入门:快速上手图片和视频中的物体识别
  • GD32F470内存布局详解:为什么你的SRAM只有448KB,以及如何用RT-Thread的memheap管理那64KB TCMSRAM
  • 2026_年网安必读!Metasploit_圣经第_2_版终
  • 算法博士和台湾算法工程师的职场焦虑
  • 全域三元共振AGI计算机 完整版终极合辑(终稿)
  • Aspinity AML100扩展板:超低功耗模拟机器学习实践
  • 【企业级AI沙箱部署白皮书】:基于Kubernetes+Docker 24.0.0实测的12项关键参数调优清单(含CUDA 12.4兼容矩阵)
  • 激光雷达动态物体剔除总漏检?(实时性<8ms的C++滑动窗口聚类算法逆向工程)
  • AI智能体工程化实践:使用agent-pack-n-go实现标准化部署
  • DownKyi哔哩下载姬:5分钟掌握B站视频高效下载与管理终极方案
  • 【Docker AI Toolkit 2026终极接入指南】:5分钟零配置完成LLM微服务容器化部署,含企业级安全沙箱配置清单
  • 五分钟带你认识并安装使用OpenSpec
  • 生成式AI如何重塑游戏NPC:从动态对话到多模态交互
  • 如何让导航栏的下落动画效果更缓慢?
  • 从SerDes眼图到代码同步:一个硬件工程师的JESD204B物理层与链路层联调笔记
  • 华为S5700三层交换机组网:静态路由与默认路由到底怎么选?一个实验讲透区别与配置要点
  • 从/dev/nume0n1p2:clean到登录循环:一次完整的NVIDIA驱动灾难恢复记录(Ubuntu 22.04)
  • 向华为学习——详解华为流程化组织【附全文阅读】
  • AI智能体工程化实践:使用agent-pack-n-go实现一键打包与部署
  • 图像篡改定位:ForMa论文解读与简单复现:翻译+代码跑通(Vision Mamba)
  • 全域数学电子结构模型与张祥前 “环形螺旋模型” 对比研究
  • 告别开机输密码!用TPM 2.0给你的Ubuntu 22.04全盘加密硬盘配把‘智能钥匙’
  • 工业USB技术:挑战、解决方案与应用实践
  • 构建去中心化个人AI智能体:基于OpenClaw与Morpheus的本地化实践
  • 我把 iOS 存钱 App 移植到鸿蒙:number 精度丢失坑了我两天
  • Get cookies.txt LOCALLY:重新定义浏览器Cookie本地安全导出的技术方案