【数据结构】插入排序详细图解(一看就懂)

 

💯 博客内容:【数据结构】插入排序详细图解(一看就懂)

😀 作  者:陈大大陈

🦉所属专栏:数据结构笔记

🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信!

💖 欢迎大家:这里是CSDN,我总结知识和写笔记的地方,喜欢的话请三连,有问题请私信 😘 😘 😘

目录

前言引入

 插入排序的原理

插入排序源码

详细实例过程图解

本章小结

前言引入

  插入排序是一种非常有意思且比较高效的排序方法,同时插入排序是希尔排序的基础 

我预备下一篇博客讲解希尔排序,这一篇就先讲一下插入排序。

在生活中,这种排序方法也随处可见

例如,我们在玩扑克牌时,总会按照插入排序的方法调整扑克牌的位置。 

玩扑克牌怎么会用到插入排序的方法呢?

当我们拿起第二张牌时,就会下意识的与第一张牌进行比较,如果比第一张牌小,我们就会将牌插入至第一张牌的左边,反之就插入至右边。

这样边插入边排序,就是插入排序,插入后的序列依旧是有序的。

大家先看一下下面的原理和代码,然后再看实例图可能会比较好。

 插入排序的原理

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与 array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。 
把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,我们就可以得到一个新的有序序列。

我们将原数组空间看成两个部分,前边是有序部分,后边是无序部分,有序部分我们默认为它就已经是排好序的,在尾部新加入的元素有可能会导致整个有序数组变得无序,因此我们需要进行调整。

调整方式就是将新加入的元素进行对比并往前移动,新加入元素和它前边的元素进行对比,如果它比它前边的元素小,则二者互换位置,不断重复这个过程,直到它前边的元素小于它才会停止,这样一来,他就仍然是有序数组。

插入排序源码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void InsertSort(int* a, int n)
{
	int tmp;
	int end;
	for (int i = 1; i < n; i++)
	{
		end = i - 1;
		tmp = a[i];
		while (end >= 0)
		{
			if (a[end] > tmp)
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}
int main()
{
	int a[] = { 45,67,89,12,34,5,6,8,1,2,67,99,55 };
	InsertSort(a, sizeof(a) / sizeof(a[0]));
	for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
/*{ 45,45,89,12,34,5,6,8,1,2,67,99,55 };*/

运行结果

详细实例过程图解

下面用一组实例来解释。

就按这组数据为例,此时end处的值不大于i处的值,不用进入循环, a[end + 1] = tmp;不造成影响

第二次,同理,i++继续往后走。

第三次,这次不一样了!a[end]>a[i],也就是a[end]大于tmp了,进入循环。

循环一次,完成 a[end + 1] = a[end];  end--;a[end+1]=tmp;的操作。

此时end值为1,大于0,循环继续。

循环两次,完成 a[end + 1] = a[end];  end--;a[end+1]=tmp;的操作。

此时end值为0,等于0,循环继续。

 

循环三次, 完成 a[end + 1] = a[end];  end--;a[end+1]=tmp;的操作。

此时end值为-1,小于0,循环结束。

第一次排序结束,下面的排序也就是比葫芦画瓢了,这里我就不列举了。

本章小结

直接插入排序的特性总结:
1. 元素集合越接近有序,直接插入排序算法的时间效率越高
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1),是一种稳定的排序算法
4. 是否稳定:稳定

下一篇更新希尔排序,博客里如果有问题的话,还请大佬私信我,我会修改的。

有问题的话请私信问我,我看到就会回的。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CleanMyMac X软件的清理效果怎么样?好不好用

在实际使用中&#xff0c;CleanMyMac X的清理效果非常显著。以下是一些实际的使用案例和数据&#xff1a; 清理效果的实例&#xff1a;一位Mac用户反映&#xff0c;他的Mac电脑在使用了三年后&#xff0c;通过CleanMyMac X的清理&#xff0c;成功清除了超过62GB的垃圾数据。这…

Cesium 自定义Primitive - 矩形

一、创作思路 1、创建一个自定义CustomPrimitive 2、然后根据两个点&#xff0c;生成矩形 3、方便后期绘制矩形 二、实现代码 1、在vue的包中加入turf. npm install turf/turf 1、创建一个CustomRectanglePrimitive类,并加入更新的代码 import {Color,GeometryInstance,Groun…

【PPT技巧】PPT怎么设置修改文件密码?

PPT文件制作好了之后&#xff0c;保护内容防止在演示时出错是很重要的&#xff0c;那么如何将PPT文件设置成禁止修改模式呢&#xff1f;今天分享几个方法给大家。 方法一 将PPT文件直接保存或者另存为一份文件&#xff0c;在保存时&#xff0c;将文件格式选择为PowerPoint图片…

win系统如何同时安装MySQL5和MySQL8

win系统如何同时安装MySQL5和MySQL8 文章目录 win系统如何同时安装MySQL5和MySQL81、准备好两种版本的数据库2、下载后解压到你指定的目录3、手动配置安装MySQL5和8安装MySQL53.1创建my.ini文件3.2生成data文件夹 安装MySQL83.1创建my.ini文件3.2生成data文件夹 4、配置环境变量…

【.NET Core】深入理解IO - 读取器和编写器

【.NET Core】深入理解IO - 读取器和编写器 文章目录 【.NET Core】深入理解IO - 读取器和编写器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader类2.2 BinaryWriter类 三、StreamReader和StreamWriter3.1 StreamReader类3.1 StreamWriter类StreamWriter类构造函数Str…

【Datawhale组队学习:Sora原理与技术实战】Attention和LLM

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

FL Studio2024中文版全新发布,水果音乐制作软件再升级

随着音乐制作技术的不断发展&#xff0c;FL Studio也在不断升级和完善。近日&#xff0c;备受期待的FL Studio2024中文版终于全新发布&#xff01;这一版本的推出为广大音乐爱好者带来了更加丰富的音乐制作体验和更多创新功能。 FL Studio2024中文版在继承了之前版本强大功能的…

分享一本好书《大模型应用开发极简入门:基于GPT-4和ChatGPT》

如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;ChatGPT 就吸引了 100 万用户——当然&#xff0c;数据不是关键&#xff0c;关键是其背后的技术开启了新的 AI 狂潮&#xff0c;成为技术变革的点火…

没有硬件基础可以学单片机吗?

没有硬件基础可以学单片机吗&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&#xff0c…

以线缆行业为例,工业智能网关的实际应用及其带来的变革-天拓四方

工业智能网关是一种集数据采集、传输、处理和分析于一体的智能化设备。它能够实现对工业现场各种传感器、执行器等设备的数据进行实时采集&#xff0c;并通过网络传输到云端或本地数据中心进行分析处理。同时&#xff0c;工业智能网关还具备边缘计算能力&#xff0c;能够在本地…

uniapp开发android原生插件

一、下载原生开发SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 将开发uniappa原生android的插件解压到ben本地目录&#xff0c;目录结构如下&#xff1a; 接下就可以使用 UniPlugin-Hel…

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…

钉钉h5应用 环境报错Error: Do not support the current environment:notInDingTalk

钉钉h5应用 环境报错 Error: Do not support the current environment&#xff1a;notInDingTalk problem Error: Do not support the current environment&#xff1a;notInDingTalk reason 前端页面运行在普通浏览器 solution 需要将h5页面在后台发布后&#xff0c;在钉…

如何清理Windows的磁盘空间?这里提供常规的和非常规的方法

驱动器越来越大,但无论你有固态硬盘(SSD)还是巨大的机械硬盘,它们似乎总是会装满。这些提示将帮助你释放Windows 10或Windows 11电脑内部存储空间。 运行磁盘清理 Windows包含一个内置工具,可以删除内部存储驱动器上的临时文件和其他不重要的数据。要访问它,右键单击“…

LeetCode.232. 用栈实现队列

题目 232. 用栈实现队列 分析 先了解一下栈和队列的特点&#xff1a; 栈&#xff1a;先进后出队列&#xff1a;先进先出 想用栈实现队列的特点&#xff0c;就需要使用两个栈。因为两个栈就可以将列表倒序。 假设第一个栈 s1 [1,2,3]&#xff0c;第二个栈 s2 [] 。若循环…

Git分布式管理-头歌实验分支管理

一、创建本地分支-git branch 任务描述 当你进入一个团队&#xff0c;在获得产品的完整代码之后&#xff0c;你首先要做的就是&#xff0c;在本地创建一个属于自己的分支&#xff0c;然后才能在自己的分支上进行开发。 本关任务&#xff1a;在本地仓库创建一个新的分支&#xf…

面试问答总结之Java进阶

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;注解Annotaion &#xff08;java标注&#xff09;&#x1f415;内置注解&#x1f415;元注解 &#x1f380;对象克隆&#x1f415;如何实现克隆&#x1f415;如何实现深克…

从零开始学习PX4源码2(PX4姿态误差计算)

目录 文章目录 目录摘要1.源码1.1源码路径1.2源码程序1.3源码功能 2.源码分析 摘要 本节主要记录PX4姿态误差计算过程&#xff0c;欢迎批评指正。 1.源码 1.1源码路径 PX4-Autopilot/src/modules/mc_att_control/AttitudeControl/AttitudeControl.cpp1.2源码程序 matrix::…

[项目设计] 从零实现的高并发内存池(三)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 4.CentralCache实现 4.1 CentralCache整体架构 4.2 围绕Span的相关设计…

STM32CubeIDE基础学习-基础外设初始化配置

STM32CubeIDE基础学习-基础外设初始化配置步骤 前言 前面的文章介绍了基础工程的创建步骤&#xff0c;这篇文章就接着在基础工程的基础上来配置相关外设了&#xff0c;下面以STM32F103C8T6的主芯片为例进行简单配置。 基础工程创建步骤回顾 具体的配置步骤流程如下&#xff1…