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

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

引言

玩纸牌 的时候。往往 需要将牌从乱序排列变成有序排列

在这里插入图片描述
在这里插入图片描述
这就是插入排序

插入排序算法思想

先看图
在这里插入图片描述
在这里插入图片描述
首先第一个元素 我默认已有序
那我们从第二个元素开始,依次插入到前面已有序的部分中。具体来说,我们将第二个元素与第一个元素比较,如果第二个元素比第一个元素小,则交换它们的位置。然后再将第三个元素插入到前两个元素已经排序好的部分中,以此类推,直到将最后一个元素插入到整个序列中。这个过程可以

在这里插入图片描述

从数组的第二个元素开始遍历,假设当前元素是已排序的序列中的一个正确位置,记为"value"。
往前遍历已排序的序列,如果当前元素大于"value",则将当前元素移至下一位置。这个过程就像在已排序的序列中寻找"value"的正确位置。
当找到"value"的正确位置后,将"value"插入这个位置。
重复以上步骤,直到数组全部有序。

插入排序算法专区

// 定义一个名为InsertSort的函数,它接受三个参数:一个整数数组arr,表示要排序的数组,一个整数size,表示数组的大小,以及一个指向布尔函数的指针Comp。这个布尔函数用于比较两个整数。  
void InsertSort(int arr[], int size, bool (*Comp)(const int&, const int&)) {// 检查是否提供了比较函数。如果没有提供(即Comp指针为nullptr),那么直接返回,不进行排序。  if (Comp == nullptr) {return;}// 从数组的第二个元素开始遍历,i表示当前处理元素的索引  for (int i = 1; i < size; i++) {// 将当前索引i的元素保存到变量value中,此元素待插入到已排序的部分  int value = arr[i];// j表示已排序部分的最后一个元素的索引,它从i-1开始向左移动,寻找插入位置  int j = i - 1;// 当j大于等于0并且Comp函数返回真(即arr[j]大于value)时,继续向左移动j,同时将arr[j]元素向右移动一位  while (j >= 0 && Comp(arr[j], value)) {arr[j + 1] = arr[j];j--;}// 找到了插入位置,将value插入到j+1的位置上  arr[j + 1] = value;}
}// 定义一个名为GreaterCmp的函数,它接受两个const int&类型的参数val1和val2,返回值为bool类型。当val1大于val2时返回true,否则返回false。  
bool GreaterCmp(const int& val1, const int& val2) {return val1 > val2;
}// 定义一个名为LessCmp的函数,它接受两个const int&类型的参数val1和val2,返回值为bool类型。当val1小于val2时返回true,否则返回false。  
bool LessCmp(const int& val1, const int& val2) {return val1 < val2;
}
http://www.lryc.cn/news/254626.html

相关文章:

  • 安装Kuboard管理K8S集群
  • 网络安全行业大模型调研总结
  • Linux AMH服务器管理面板本地安装与远程访问
  • Sharding-Jdbc(3):Sharding-Jdbc分表
  • zookeeper集群 +kafka集群
  • 2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序
  • Python版本与opencv版本的对应关系
  • 【开源视频联动物联网平台】LiteFlow
  • 家用智能门锁——智能指纹锁方案
  • Qt6 QRibbon 一键美化Qt界面
  • JAVA IO:NIO
  • Python 在控制台打印带颜色的信息
  • SQL Server 数据库,创建触发器避免数据被更改
  • C语言实现植物大战僵尸(完整版)
  • 基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • 【C++】手撕string思路梳理
  • 【数据结构和算法】确定两个字符串是否接近
  • [足式机器人]Part2 Dr. CAN学习笔记-Ch0-1矩阵的导数运算
  • 如何让软文更具画面感,媒介盒子分享
  • Hadoop学习笔记(HDP)-Part.19 安装Kafka
  • Arrays类练习 - Java
  • Java多线程:代码不只是在‘Hello World‘
  • 使用PCSS实现的实时阴影效果
  • 用于缓存一些固定名称的小组件
  • Python 读取电子发票PDF 转成Excel
  • 我的项目问题
  • 【c】杨辉三角
  • 算法刷题之数组篇
  • TR转发路由器测评—云企业网实现跨地域跨VPC的网络互通测评实战【阿里云产品测评】
  • 1.1美术理论基础