数据结构与算法(Java版) | 详解十大经典排序算法之一:插入排序

news2024/11/24 23:10:02

接下来,我来给大家讲解第三种排序算法,即插入排序。

基本介绍

首先,我们来看下插入排序的基本介绍。

插入排序,其属内部排序法,是对于欲排序的元素以插入的方式来找寻该元素的适当位置,以便最终达到排序目的的一种排序算法。

基本思想

简单认识插入排序之后,接下来我就要来给大家详细说说它的排序思想了。

插入排序的基本思想是这样子的,即把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,然后在排序的过程中每次从无序表中取出第一个元素,取出过后,把它的排序码依次与有序表元素的排序码进行比较,比较过后,再将其插入到有序表中的适当位置,使之成为一个新的有序表。

可能我这样讲,有些同学会觉得比较抽象,不过没关系啊,下面我会给大家看一个插入排序的思路图解,相信大家看完过后自然就会明白我上面讲的插入排序的基本思想了。

说啊,目前有一个数组,它的初始状态是下面这样子的。

在这里插入图片描述

大家可以看到,初始状态下我们认为第一个元素17就是一个有序表,因为一个元素不管是按从小到大排,还是按从大到小排,它都是有序的。至于后面的五个元素嘛,那我们就要把它看作是一个无序表了。

接下来,自然就是要来针对该数组进行插入排序了。

首先,我们来看一下第一次插入,根据插入排序的基本思想可知,第一次插入是要将无序表中的第一个元素3插入到有序表中的适当位置去,即有序表元素17的前面。

在这里插入图片描述

有同学可能会有疑惑,无序表中的第一个元素3是如何知道要插入到有序表元素17的前面的呢?很简单,3会先跟17比较,很明显,3是要比17小的,因此我们会让17往后面挪一位,挪毕,继续让3与有序表前面的元素进行比较,若发现有序表前面已没有元素了,则便把3插入到17的前面。不难知道,此时,会形成新的有序表(即[3, 17])与无序表(即[25, 14 ,20, 9])。

然后,我们再来看一下第二次插入,第二次插入不用我说,想必大家都已经知道是要将无序表中的第一个元素25插入到有序表中的适当位置去了吧!

同样,还是刚刚那个逻辑,第二次插入我们会先让25跟有序表中最后一个元素比较,很明显25是要比17大的,所以我们要将25给插入到17的后面。

在这里插入图片描述

注意,这儿我是按照从小到大的顺序来对待排序数组进行排序的,当然,如果是按照从大到小的顺序来排序的话,那么这一次插入25就要被插入到有序表最前面的那个位置上了。

接着,我们再来看一下第三次插入,第三次插入不用我说,想必大家都已经知道是要将无序表中的第一个元素14插入到有序表中的适当位置去了吧!

在这里插入图片描述

紧接着,我们再来看一下第四次插入,同上,第四次插入得将无序表中的第一个元素20插入到有序表中的适当位置去。

在这里插入图片描述

最后,我们来看一下第五次插入,很明显,第五次插入是要将无序表中的第一个元素9插入到有序表中的适当位置去。

在这里插入图片描述

现在大家应该搞清楚插入排序的基本思想了吧!是不是还是挺简单的啊!至少我认为与冒泡排序的排序思想比起来,插入排序还是更好理解一点的。

不知道大家有没有发现这一点,就是我们待排序数组一共有6个元素,插入排序完其实我们一共得插入5次。为什么是5次呢?因为第一个元素我们认为它就是一个有序表,因此无论怎么排,它都是有序的,而这也就是说我们不需要为它找寻适当位置并进行插入。所以,实际上,我们是要为后面的5个数找寻适当位置并进行插入。

至此,关于插入排序的基本思想,那我就给大家讲解到这里了。至于接下来要干嘛,相信大家也都知道了,无非就是来编写具体代码用以实现插入排序。

代码实现

。。。

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

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

相关文章

解决RTC内核驱动的问题bm8563

常用pcf-8563 , 国产平替BM8563(驱动管脚一致); 实时时钟是很常用的一个外设,通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟,可以使用专用的实时时钟芯片来完成此功能 RTC 设备驱动是一个标准…

最新版pycharm安装教程

目录 PyCharm 简介 访问 PyCharm 官网: 选择版本: 这里我们选择社区版即可 环境变量的配置 第一步 第二步 第三步 Pycharm的使用 【报错解决】 通用注意事项: PyCharm 简介 ​ PyCharm是一种Python IDE(Integrated Devel…

Facebook的声音:听见社交媒体的心跳

社交媒体如今已经成为人们日常生活中不可或缺的一部分,而Facebook作为其中的佼佼者,承载着数以亿计的用户的交流、分享和连接。在这个信息爆炸的时代,Facebook的声音就像是社交媒体的心跳,传递着无数个体的情感、思想和生活。本文…

led台灯对眼睛好不好?分享多款高品质护眼台灯

很多家长都关心孩子学习时led台灯对眼睛好不好?其实,目前的led技术已经十分成熟了,一些好的led灯基本能够做到无蓝光、频闪危害等等,不过这也不包括一些劣质的产品,因为有些有些商家为了降低成本,不惜牺牲产…

Angular中的管道(Pipe)

Angular中的管道(Pipe) 文章目录 Angular中的管道(Pipe)前言一、内置管道1. date管道格式化日期2. currency管道格式化货币3. uppercase和lowercase管道转换字符串大小写4. 小数位数5. JavaScript 对象序列化6. slice7. 管道链 二、自定义管道 前言 Angular中的管道&#xff0…

CogVLM/CogAgent环境搭建推理测试

引子 对于多模态大语言模型,一直没有怎么接触。刚巧一朋友有问到这方面的问题,也就顺手调研下。智谱AI的东西一直以来,还是很不错的。ChatGLM的忠实fans,看到白嫖网站github上有他们开源的多模态CogVLM/CogAgent,那就…

Java项目:基于SSM框架实现的实践项目管理系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的实践项目管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff…

systemserver为啥很少同步跨进程调用app/DeadSystemException相关问题分析套路

背景: 有学员分享了一个问题,说monkey测试过程中有一系列问题属于同类的,具体看如下截图: 可以看到这里的有很多应用都进行了crash,而且crash原因居然都是写着 DeadSystemException: The system died; earlier logs …

《Redis使用手册之散列》

《Redis使用手册之散列》 **《Redis使用手册之散列》****散列简介****HSET:为字段设置值****HSETNX:只在字段不存在的情况下为它设置值****HGET:获取字段的值****HINCRBY:对字段存储的整数值执行加法或减法操作****HINCRBYFLOAT&a…

基于飞腾D2000全国产化高速公路一体化收费站解决方案:站数据服务器、站AI服务器、收费系统、监控系统

高速公路一体化收费站解决方案 行业 交通工程及沿路设施作为公路的一个重要组成部分,对城市互联和城市发展具有重要意义,因此围绕高速公路的专用收费 站设计和建设,将有效促进枢纽集散系统与高速公路连通,显著提升城市高速集散能…

Flexible布局在Web前端开发中的实际应用

随着Web前端技术的不断发展,Flexible布局(弹性布局)已成为现代网页设计中不可或缺的一部分。它提供了一种高效、灵活的方式来组织和管理页面元素,使开发者能够轻松应对各种复杂的布局需求。本文将通过一个实际的应用案例来介绍Fle…

echarts开发技巧

tooltip 提示框组件相关的行为,必须引入提示框组件后才能使用。 tooltip: {trigger: axis,axisPointer: {type: cross,label: {backgroundColor: #6a7985,},},//为弹出层的value值增加百分号valueFormatter: function (value) {return value %}, }, tooltip.axi…

确定性最大似然(DML)估计测角

1. 最大似然函数 贝叶斯方法是基于统计理论的一种经典方法,适合于有关参数估计问题。最大似然 (Maximum Likelihood,ML) 估计方法就是贝叶斯估计方法的一种特例,是在已知高斯噪声情况下的贝叶斯最优估计。在ML算法中,观测所得信号…

postman一直转圈圈,无法启动

解决 地址栏输入%appdata%进入此目录,删除%appdata%目录下的postman文件可以解决问题。

公考学习平台|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.1论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

【华为】NAT的分类和实验配置

【华为】NAT的分类和实验配置 NAT产生的技术背景IP地址分类NAT技术原理NAT分类静态NAT动态NATNAPTEasy IP(PAT)NAT Server 配置拓扑静态NAT测试抓包 动态NAT测试抓包 NAPT测试抓包 PAT测试抓包 NAT Server检测抓包 PC1PC2服务器 NAT产生的技术背景 随着…

Android数据恢复:如何在手机上恢复丢失的文件和照片

我们都有 我们错误地从手机中删除重要内容的时刻。确实如此 不一定是我们的错。其他人可以对您的手机数据执行此操作 有意或无意。这在某个时间点发生在我们所有人身上。 但是,今天市场上有各种各样的软件可以 帮助恢复已删除的文件。这些类型的软件被归类为数据恢复…

PyTorch如何修改模型(魔改)

文章目录 PyTorch如何修改模型(魔改)1.修改模型层(模型框架⭐)1.1通过继承修改模型1.2通过组合修改模型(重点学👀)1.3通过猴子补丁修改模型 2.添加外部输入3.添加额外输出参考 PyTorch如何修改模型(魔改) 对模型缝缝补…

vue知识

一、初始vue Vue核心 Vue简介 初识 (yuque.com) 1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为【Vue模板】 4.Vue实例和容器…

TreeSet 和 TreeMap 和 HashSet 和 HashMap

一、二叉搜索树 1、概念 (1)二叉搜索树 要么是一棵空树,要么就得满足左子树上所有结点的值都小于根结点的值,右子树上所有结点的值都大于根结点的值,即左边比我小,右边比我大。二叉树的左右子树也分别都是…