【数据结构】初识排序 直接插入排序

初识排序 & 直接插入排序

  • 🐟排序在现实中的应用
  • 🐟排序的概念
  • 🐟常见的排序算法
  • 🐟直接插入排序
    • 💦举例--直接插入排序在现实种的应用
    • 💦单趟直接插入排序讲解
    • 💦直接插入排序算法

🐟排序在现实中的应用

现实中的排序不出不在,比如说高校之间的比较,根据某一特定的指标进行排序;比如说,学生的成绩排名;比如说在网上进行购物时我们可以根据购物量或者好评率或者评论数等等进行排序。

🐟排序的概念

排序的概念:
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
排序的分类:
排序又分为内部排序外部排序
内排序: 数据元素全部放在内存中的排序。
外排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

🐟常见的排序算法

🐟直接插入排序

💦举例–直接插入排序在现实种的应用


我们在玩扑克牌时,就利用了直接插入排序的思想, 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。
排序的思想结合这个扑克牌的例子,插入排序,简单理解,就是,对于原来一个已经排好序的有序数组,然后逐个插入,插入一个,排一次序,使得这个新插入的数被放在一个合适的位置,再次插入后的使得新的数组是有序的,再插入一个,则再次排序…依次循环,直至插入停止。

💦单趟直接插入排序讲解

首先,我们一定要明白和理解单趟排序,即对于一个有序的数组插入一个数。
给定一个有序数组,将要插入的数放在有序数组的最后,例如:

然后我们进行插入排序:
首先设置end,使得指针指向原有数组的最后一个位置,然后将我们要插入的数6和end所指的数9进行比较。

6<9,则需要将9其后的位置赋值为9,同时将end向前移动。

然后我们紧接着,让我们要插入的元素即6和end所指的当前的元素7进行比较。
6<7,则我们将7后面的位置赋值为7,(也就将原来的9覆盖掉了),然后end–,使得end指向前一个元素。

接着,我们让我们要插入的元素和end当前所指的元素进行比较。
6>5,即我们要插入的元素6大于end当前所指的元素5,这时,循环停止,我们将我们要插入的元素6插入到end当前所指元素即5的下一个位置即可。这样,我们的一趟插入排序就完成了。

💦直接插入排序算法

下面程序是单趟循环,[0,end]有序,把end+1位置的元素插入前序序列,使得控制最后[0,end+1]有序。

void InsertSort1(int* a,int n)
{int end=n-1;//将要插入的元素定义为放在原数组的最后一个元素int tmp=a[end+1];//用变量tmp来保存新插入的元素,防止被覆盖掉while(end>=0) //与新插入的元素相进行比较的元素,下标一定≥0    {if(tmp<a[end]){//挪动 (也就是赋值)a[end+1]=a[end];}else //大于等于 则插入到end的后面一个空{break; //插入完成,退出循环}end--;//更新end 使得循环继续}a[end+1]=tmp;
}

单趟变整体,已经排好序的数组中最开始只有一个元素,即a[0],然后插入第二个元素a[1],进行排序,然后插入第三个元素a[3]进行排序…直到插入最后一个元素a[n-1]进行排序。
则算法:

void InsertSort(int*a,int n)
{int i;for(i=1;i<n;i++){int end=i-1;int tmp=a[i];while(end>=0){if(tmp<a[end]){a[end+1]=a[end];}else{break;}end--;}a[end+1]=tmp;}
}

我们放在主函数进行测试运行:

int main()
{int a[5] = { 1,10,20,4,8 };InsertSort(a, 5);int i;for (i = 0; i < 5; i++){printf("%d ", a[i]);}return 0;
}

运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用于智慧零售的AI边缘计算盒子+AI算法软硬一体化方案

中国是世界上最大的消费市场&#xff0c;零售行业拥有极大的发展潜力&#xff0c;阿里、腾讯两大互联网巨头正在加紧、加大布局&#xff1b; 信迈智慧零售方案可涵盖快消行业、服饰行业、餐饮行业、酒店行业、美家行业、消费电子行业、新零售商行业、服饰连锁、大卖场/商超、百…

fastmock如何判断头信息headers中的属性值

fastmock可以快速提供后端接口的ajax服务。 那么&#xff0c;如何判断头信息headers中的属性值呢&#xff1f; 可以通过function中的参数_req可以获得headers中的属性值&#xff0c;比如 User-Agent&#xff0c;由于User-Agent属性带有特殊符号&#xff0c;因此使用[]方式而不…

生成式 AI 与数据融合:亚马逊云科技的前沿探索与应用

目录 前言1 生成式AI和数据2 亚马逊云科技的AI创新2.1 数据与生成式 AI 的协同创新2.2 多模态融合与创新驱动2.3 构建创新平台与工作智能助手2.4 数据整合与安全保障 3 生成式AI结合企业数据的典型技术Amazon Q4 展望未来 授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技…

经典神经网络——ResNet模型论文详解及代码复现

论文地址&#xff1a;Deep Residual Learning for Image Recognition (thecvf.com) PyTorch官方代码实现&#xff1a;vision/torchvision/models/resnet.py at main pytorch/vision (github.com) B站讲解&#xff1a; 【精读AI论文】ResNet深度残差网络_哔哩哔哩_bilibili …

NXP iMX8M Plus Qt5 双屏显示

By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用&#xff0c;可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 Verdin iMX8M Plu…

C++的explicit和隐式转换

隐式转换是指在某些情况下&#xff0c;编译器会自动进行类型转换&#xff0c;将一种类型的值转换为另一种类型&#xff0c;以满足表达式的要求。这种转换是隐式进行的&#xff0c;不需要显式地调用转换函数或构造函数。 int a 5; double b a; // int 到 double 的隐式转换上…

支持Upsert、Kafka Connector、集成Airbyte,Milvus助力高效数据流处理

Milvus 已支持 Upsert、 Kafka Connector、Airbyte&#xff01; 在上周的文章中《登陆 Azure、发布新版本……Zilliz 昨夜今晨发生了什么&#xff1f;》&#xff0c;我们已经透露过 Milvus&#xff08;Zilliz Cloud&#xff09;为提高数据流处理效率&#xff0c; 先后支持了 Up…

【Redis】Redis高并发高可用(主从复制、哨兵机制)

Redis高并发高可用 复制 在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制…

java类库的废弃API

java语言一直在进化&#xff0c;java类库也越来越庞大&#xff0c;给人的感觉是一直在做加法。 有没有做减法呢&#xff1f;当然也有&#xff0c;一些是设计失误需要撤回的&#xff0c;如可能引起线程安全问题的Thread.stop()等方法&#xff1b;还有是随着时代发展而被淘汰的&…

cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)

参考文章&#xff1a;Cocos 3.x 层级Layer - 简书 2D镜头跟随应该怎么实现呢 - Creator 3.x - Cocos中文社区 关于多个摄像机&#xff0c;动态添加节点的显示问题&#xff0c;需要动态修改layer&#xff1f; 场景&#xff1a;在制作摄像机跟随角色移动功能时&#xff0c;新增…

1.qml-3D入门讲解介绍

本章我们来学习QML 3D教程&#xff0c;QML 3D能够支持windows linux等多平台跨平台并且显示效果大部分一致&#xff0c;非常方便&#xff0c;学习的qt版本最低为qt6.5。 要使用qml 3D类&#xff0c;需要导入QtQuick3D模块。 这是使用空间渲染器和场景图的 QML 前端。目前&…

SQL Server 2016(分离和附加数据库)

1、实验环境。 基于上一个实验《SQL Server&#xff08;创建数据库&#xff09;》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放&#xff0c;数据文件class.mdf存放于原位置&#xff0…

网传滴滴系统崩了,是因为k8s版本升级错误?

11月27日晚间&#xff0c;滴滴因系统故障导致App服务异常登上热搜&#xff0c;不仅无法显示定位、无法打车&#xff0c;有司机的后台还显示收入超690亿。28日和29日&#xff0c;滴滴两次发文致歉&#xff0c;称初步确定事故起因是底层系统软件发生故障。 相较于一些网友戏谑的…

Android 应用程序无响应定位ANR原因

废话不多说&#xff0c;直接上方案&#xff1a; 第一步&#xff1a; 执行adb命令 adb bugreport /Users/mac/Desktop/anr 解压后FS/data/anr下就会有相关anr文件 /Users/mac/Desktop/anr 是电脑存储文件的路径&#xff0c;可以随便定义&#xff0c;这个没有影响。我的电脑是…

人工智能-优化算法之学习率调度器

学习率调度器 到目前为止&#xff0c;我们主要关注如何更新权重向量的优化算法&#xff0c;而不是它们的更新速率。 然而&#xff0c;调整学习率通常与实际算法同样重要&#xff0c;有如下几方面需要考虑&#xff1a; 首先&#xff0c;学习率的大小很重要。如果它太大&#xf…

Todesk 无法登录,无法联网

前言 我习惯用todesk远程ubuntu&#xff0c;但是突然发现掉线了&#xff0c;但是ssh还能连接 问题查找 1.ping 一下主机ip 2.ssh连接后&#xff0c;ping 一下百度&#xff0c;查看是否外网正常 3.输入一下命令 ps -ef | grep todesk #查看todesk 进程 sudo kill -9 ....…

HTML5 的全局属性 hidden 和 display:none 的关系

目录 1&#xff0c;hidden 和 display:none 的关系2&#xff0c;其他隐藏元素的方式2.1&#xff0c;语意上的隐藏2.2&#xff0c;视觉上的隐藏 1&#xff0c;hidden 和 display:none 的关系 hidden - MDN 参考 一句话总结&#xff1a;hidden 是HTML5 新增的全局布尔属性&…

Centos7使用阿里云镜像加速服务安装Docker

文章目录 一、前提说明二、安装docker1、创建docker文件夹2、安装所需的软件包3、设置Docker仓库4、安装docker5、启动验证使用阿里云镜像加速服务 三、卸载docker 一、前提说明 需要先安装好虚拟机&#xff0c;可以查看这篇https://blog.csdn.net/qq_36433289/article/detail…

Python批处理PDF文件,PDF附件轻松批量提取

PDF附件是指在PDF文档中嵌入的其他文件&#xff0c;如图像、表格、音频、视频或其他文档。这些附件可以与PDF文档一起存储、传输和共享&#xff0c;为文档提供了更丰富的内容和更多的功能。通过添加附件&#xff0c;我们可以将相关文件和信息捆绑在一起&#xff0c;使其更易于管…

Verilog 入门(五)数据流模型化

文章目录 连续赋值语句时延 连续赋值用于数据流行为建模&#xff1b;相反&#xff0c;过程赋值用于顺序行为建模。组合逻辑电路的行为最好使用连续赋值语句建模。 连续赋值语句 连续赋值语句将值赋给线网&#xff08;连续赋值不能为寄存器赋值&#xff09;&#xff0c;它的格式…