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

数据结构——直接插入排序

一、基本知识:

1.排序:默认递增。

2.定义:每一趟把待排序序列的第一个值,插入到前面的已经排序好的序列。

不申请额外的空间,在原序列的基础上进行排序所以就需要避免覆盖的问题。

二、基本原理:将数组分成已排序区间和未排序区间:

1.第一个元素单独作为已排序区间,剩余所有元素是未排序区间;

假设我们现在有一个待排序序列,默认第一个数据就是一个已经排序好的序列,因为我们此时将第一个数据看成一个单独的序列,因为只有一个数据,所以不存在是否有序无序,也就是说它是一个有序序列。

2.依次取出未排序区间的第一个元素,向前插入到已排序区间的合适位置。

以上面序列为例:

①第一趟:

思想:未排序区间第一个元素是18,根据比较得到18<59,又因为默认排序是递增的,所以18应该在59的左边。

操作:此时我们已经知道18应该在0号下标,59应该在1号下标,但是插入排序是在原序列的基础上进行排序,所以在数据移动时,就需要将18提前拷贝下来,避免覆盖,之后让59进行数据移动到1号下标,再让已经拷贝下来的18,移动到0号下标。

此时已排序好的序列就是18 59 从72开始就是未排序序列

②第二趟:

思想:此时72是未排序区间的第一个值,将72和已排序区间59 18进行比较,因为序列是递增的所以我们发现72比59大,所以72应该放在59的后面。

操作:我们将待排序序列的第一个值拷贝下来因为计算机开始不知道这个待排序数据应该在那个下标,所以我们还是要先将待排序的数据进行拷贝避免后续可能会出现的数据覆盖。将72和已经排序好的序列进行比较,59<72,所以72应该放置在59的后面。

所以此时 18 59 72 是已经排序好的序列,从85开始是未排序好的序列。

③第三趟:

思想:此时85是未排序序列的第一个元素,将85和已排序好的序列18 59 72进行排序,因为序列是递增的,所以我们发现85比72小应该放在72的后面。

操作:将待排序序列的第一个元素85拷贝下来和已经排序好的序列进行数据比较,72<85,85就放到72的后面

④后续雷同............

三、代码实现

void Insert_Sort(int arr[], int len) { for (int i = 1;i < len;i++)//控制的是趟数 { int temp = arr[i]; int j = i - 1; for (;j <=0;i--)//控制的是对已经排好的序列从右至左依次遍历 { if (temp>arr[j])//如果比我取出来的temp大,向后挪动 { arr[j + 1] = arr[j]; } else { break; //情况1:遇到了不大于我的值,停下来,把值放回去。 } } //情况2:越界了,停下来,把值放回去 arr[j + 1] = temp; } }
http://www.jsqmd.com/news/1152076/

相关文章:

  • 【独家逆向工程报告】:Gemini如何动态重写Google Maps地理语义图谱(仅限首批技术白皮书持有者)
  • Kaggle 肥胖预测赛:4模型融合实战,交叉验证准确率提升至 91.6%
  • 当大语言模型遇上USV集群:大模型驱动的自适应路径规划方法
  • 【JSON Schema生产级交付标准】:从ChatGPT草稿到Swagger 3.0兼容Schema仅需3步——已验证于23个微服务项目
  • 【Angular开发者生存手册】:3类高危手动编码场景已被Cursor AI替代——附可复用Prompt模板库(限免72小时)
  • 遗传规划因子挖掘:5个自定义时序算子与3种适应度函数(RankIC/IR/夏普)的实战对比
  • GP7101 I2C背光驱动与PWM背光驱动对比:RK3566屏幕调试的2种方案与选择
  • REPENTOGON脚本扩展器:为《以撒的结合》开启全新纪元
  • 卡尔曼滤波 Python 3.12 实现:从 2 传感器数据融合到 5 个核心公式代码化
  • 各大平台上自动化可接管电脑、手机的人工智能项目解析
  • 计算机考试-C语言typedef—东方仙盟 —东方仙盟
  • 云测平台横向对比与优测深度解析
  • 哔哩哔哩开发岗面试题目
  • 影刀RPA Excel多表合并:跨文件跨Sheet数据整合
  • 做线上运营总不见效?专业营销策划团队到底能帮企业解决什么问题
  • 为什么92%的电商团队在SD模型选型上踩坑?(附Shopify/TikTok Shop/拼多多平台适配评分表)
  • 第 0 课:LangChain 学习路线与环境准备
  • 第 05 课:记忆与流式传输
  • 【claude code实践】让 Claude Code 分析依赖:理解项目中的关键包与调用链
  • SEGGER RTT 7.96 多通道配置实战:3通道独立输出日志、数据与命令
  • 本地部署开源物联网平台 ThingsBoard 并实现外部访问( Linux 版本)
  • 2026大理黄金回收白银回收铂金回收中检持证鉴定师铂金银饰高价回收门店联系方式推荐
  • AI催生新岗位“botsitting”,大学生入行正当时,未来或成常态岗位
  • TabDDPM 实战:在 15 个基准数据集上超越 GAN/VAE,ML 效率提升 5% 以上
  • 急购必看!国产拉链拉力机选型三大误区别再犯
  • AI工具Codex实战:外贸客户开发自动化,电梯行业精准获客85家
  • 【claude code实践】用 Claude Code 阅读陌生代码库:从入口文件到核心流程
  • 地平线开发岗面试题目
  • 为什么顶尖Angular团队已停用手写Component?Cursor AI生成代码通过SonarQube 98.2%质量阈值,你还在等什么?
  • Cursor AI生成的Angular组件如何通过NgRx状态流校验?一线架构师亲测的5层验证协议首次公开