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

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

基本介绍

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

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

基本思想

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

插入排序的基本思想是这样子的,即把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.mzph.cn/web/5163.shtml

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

相关文章

2024年十五届蓝桥杯省赛大学B组真题(Java完整版)

2024年十五届蓝桥杯省赛大学B组真题(Java) 前言: 赛后一直犹豫要不要对比赛进行复盘出个题解,拖到了现在,终于也是等到比赛结果出来,看到没有辜负个人期望成功取得省一,决定在国赛前对省赛进行…

根据txt文件绘制词云 -- python

根据一段文字绘制词云,我们有两种方法 ,一种是登录专业的绘图网站http://yciyun.com/ 不过,貌似这个网站需要会员才可以体验,他只是给出了一些形状图案的词云,虽然看起来很精美,但是他不能让我们自己随意更…

第三节课,功能2:开发后端用户的管理接口5min(用户的查询/状态更改)【4】【9开始--本人】

一、代码任务 【录个屏】 二、写代码 2.1 代码文件位置 2.2 代码如下: 2.3 官方文档: 网址: 逻辑删除 | MyBatis-Plus (baomidou.com) 三、代码有bug,没有鉴权,表里添加一个字段。role 管理员 3.1 判断操作的人&am…

Slave SQL线程与PXB FTWRL死锁问题分析

1. 问题背景 2.27号凌晨生产环境MySQL备库在执行备份期间出现因FLUSH TABLES WITH READ LOCK未释放导致备库复制延时拉大,慢日志内看持锁接近25分钟未释放。 版本: MySQL 5.7.21PXB 2.4.18 慢查询日志: 备份脚本中的备份命令:…

spring boot 基础案例【3】构建RESTful API与单元测试

教程1 案例教程 案例仓库 在线编程 教程2 基础教程 教程仓库 在线编程 本案例所在的仓库 本案例所在的文档 进入正文 1.文件目录 1. Chapter21Application.java 地址:chapter2-1/src/main/java/com/didispace/chapter21/Chapter21Application.java package com.d…

Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析

序言 最近因为工作需要在阅读flink checkpoint处理机制,学习的过程中记录下来,并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …

人工智慧时代的引擎:揭开机器人核心零部件的奥秘

机器人核心零部件技术现状及趋势 工业机器人是我国制造业的“顶冠明珠”,在机器人核心零部件的研发制造上,我国在很多方面已经接近国际顶尖水平,但一些核心技术仍无法满足复杂高端领域应用需求,如精密减速器的传动精度与寿命间竞争…

深度学习的瓶颈是什么!

深度学习主要的瓶颈: 数据依赖与标注问题:深度学习模型通常需要大量的标注数据来进行训练。然而,获取大量的标注数据不仅成本高昂,而且在某些领域(如医疗、金融等)中可能难以获取足够的标注数据。此外&…

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…

无人机反制:雷达探测+信号干扰器技术详解

固定翼无人机、旋翼无人机等,可折叠式无机、DIY无人机等。黑飞,监管困难给航空业带来了诸多隐患;给恐怖袭击及间谍侦察带来新的方式、引发了各国地区政府的忧虑,在中国存在的问题更加严峻。 反无人飞行器防御系统(AUDS)&#xff0…

【C++】手撕list(list的模拟实现)

目录 01.节点 02.迭代器 迭代器运算符重载 03.list类 (1)构造与析构 (2)迭代器相关 (3)容量相关 (4)访问操作 (5)插入删除 我们在学习数据结构的时候…

使用 GitHub Actions 实现项目的持续集成(CI)

目录 什么是 GitHub Actions 基础概念 Workflow 文件 Workflow 语法 实例:编译 OpenWrt 什么是 GitHub Actions GitHub Actions 是 GitHub 推出的持续集成(Continuous Integration,简称 CI)服务它允许你创建自定义工作流&am…

黑马面试篇1(续)

黑马面试篇1-CSDN博客(续集) 六、消息中间件篇 6.1 RabbitMQ 1)使用场景: 异步发送(验证码、短信、邮件…)MYSQL和Redis , ES之间的数据同步分布式事务削峰填谷… 2)RabbitMQ消息的重复消费问…

分享三款可以给pdf做批注的软件

PDF文件不像Word一样可以直接编辑更改,想要在PDF文件上进行编辑批注需要用到一些专业的软件,我自己常用的有三款,全都是官方专业正版的软件,功能丰富强大,使用起来非常方便! 1.edge浏览器 这个浏览器不仅可…

【Spring】Spring中AOP的简介和基本使用,SpringBoot使用AOP

📝个人主页:哈__ 期待您的关注 一、AOP简介 AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充,目前已成为一种比较成…

ton-http-api安装部署

1、拉取github代码 mkdir /data git clone https://github.com/toncenter/ton-http-api.git cd ton-http-api2、创建环境变量 ./configure.py cat .env TON_API_CACHE_ENABLED0 TON_API_CACHE_REDIS_ENDPOINTcache_redis TON_API_CACHE_REDIS_PORT6379 TON_API_CACHE_REDIS_T…

Facebook’s Tectonic Filesystem: Efficiency from Exascale——论文阅读

FAST 2021 Paper 分布式元数据论文阅读笔记整理 背景 Blob storage 用来存放大量的文本、图片、视频等非结构化数据 包含 EB 级别的数据 存储内容大小不一,大小几KB到几MB不等 要求低时延 使用 Haystack 和 F4 Data warehouse 存放用于数据分析和机器学习的…

Leetcode—1232. 缀点成线【简单】

2024每日刷题&#xff08;122&#xff09; Leetcode—1232. 缀点成线 算法思想 实现代码 class Solution { public:bool checkStraightLine(vector<vector<int>>& coordinates) {int x0 coordinates[0][0];int y0 coordinates[0][1];int x1 coordinates[1…

Excel 中用于在一个范围中查找特定的值,并返回同一行中指定列的值 顺序不一样 可以处理吗

一、需求 Excel 中&#xff0c;在一列&#xff08;某范围内&#xff09;查找另一列特定的值&#xff0c;并返回同一行中另一指定列的值&#xff0c; 查找列和返回列的顺序不一样 二、 实现 1、下面是一个使用 INDEX 和 MATCH 函数的例子&#xff1a; 假设你有以下数据&…

python数据可视化:雷达图

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 python数据可视化&#xff1a; 雷达图 选择题 关于以下代码输出的雷达图中&#xff0c;以下说法正确的是&#xff1f; import numpy as np import matplotlib.pyplot as plt from pylab impor…