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

news2024/12/23 18:59:30

 

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

😀 作  者:陈大大陈

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

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

💖 欢迎大家:这里是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. 是否稳定:稳定

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

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

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

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

相关文章

ARM-FS6818-点亮LED灯

点亮LED灯 1.开发板介绍 2.cpu控制硬件原理 六大指令里边&#xff0c;只有内存访问指令能访问cpu之外的内容。那cpu如何控制硬件&#xff1f; *load/store指令-->操作4G内存 任何一个芯片都有一个地址映射表。告诉地址空间是如何映射的&#xff0c;便于我们找到对应的硬件地…

ChatGPT3.5-4资源汇总,直连无梯子

什么是ChatGPT? ChatGPT&#xff0c;全称&#xff1a;聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;是OpenAI开发的人工智能聊天机器人程序&#xff0c;于2022年11月推出。该程序使用基于GPT-3.5、GPT-4…

limou的C语言学习路径

0.前言 你好这里是limou3434的一篇个人博文&#xff0c;感兴趣的话您可以到我的CSDN博客上看看&#xff0c;下面我将以前学习了大概7个月的C语言学习总结给您做一个集合&#xff0c;希望能够帮助到您。 1.C语言大略 学习C前的一些基础知识 这篇文章简单过一下C语言的基础&a…

U盘移动硬盘变本地硬盘怎么办 ,移动硬盘变本地硬盘的恢复方法

这是分区逻辑损坏后最常见的表现。U盘移动硬盘变本地硬盘怎么办 &#xff0c;移动硬盘变本地硬盘的恢复方法有些用人到这种情况后首先会尝试使用Windows系统自带的硬盘修复工具chk命令进行修复&#xff0c;不过&#xff0c;这样操作并不能解决问题&#xff0c;往往会造成更严重…

UFS 2 -UFS架构简介2

UFS 2 -UFS架构简介2 1 UFS架构简介1.1 System Boot and Enumeration1.2 UFS Interconnect (UIC) Layer1.2.1 UFS Physical Layer Signals1.2.2 MIPI UniPro1.2.3 MIPI UniPro Related Attributes 1.3 UFS Transport Protocol (UTP) Layer1.3.1 Architectural Model1.3.1.1 Cli…

ChatGPT时代:数据标注会成为一种人机交互“语言”么?

标注猿的第70篇原创 一个用数据视角看AI世界的标注猿 大家好&#xff0c;我是AI数据标注猿刘吉&#xff0c;一个用数据视角看AI世界的标注猿。 从去年的10月份到现在有半年的时间没有更新了&#xff0c;去年没有更新是疫情的原因&#xff0c;今年没有更新主要有两个原因一…

微软联合OpenAI发大招了,上线Windows Copilot,速来围观~

目录 前言 Windows Copilot 问世 Bing Chat 插件功能上线 Edge 与 365 Copilot 结合 搭建你的第一个AI应用&#xff08;Azure AI Studio&#xff09; 总结 写到最后 大家好&#xff0c;我是大侠&#xff0c;AI领域的专业博主 前言 ChatGPT如今已成为炙手可热的话题&am…

面向亚裔人群的美国华人超市【Maison Solutions】申请纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;来自美国南加州的面向亚裔人群的美国华人超市【美生科技Maison Solutions】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票…

软考A计划-试题模拟含答案解析-卷十四

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

ipad触控笔是哪几款?一般电容笔和Apple pencil区别

和苹果Pencil最大的区别就是&#xff0c;电容笔没具备重力压感&#xff0c;只有一种倾斜的压感。如果你不经常画画&#xff0c;那么你可以使用一款平替电容笔。这种平替电容笔&#xff0c;不仅仅是用在办公上&#xff0c;还能用来做笔记和练习。更何况&#xff0c;现在苹果一款…

2023苹果电脑专用下载工具Folx5.27.13991

Mac 上免费的网络下载管理器 Folx Mac 下载器有一个支持 Retina 显示的现代界面。提供独特的系统排序、存储下载内容与预览下载文件。Folx 的 PRO 版是优秀的 BT 查找工具 - 您无需在网络浏览器中打开多个种子追踪器来查找您需要的内容。 虽然苹果系统比较封闭&#xff0c;如果…

蔚来Java实习面经

目录 1.解释一下MySQL中脏读、不可重复读、幻读2.索引失效的场景有哪些&#xff1f;3.Explain执行计划用过吗4.Type字段有哪一些5.binlog和redolog的区别6.Redis基本数据类型7.有序集合的底层数据结构使用的是&#xff1f;8.跳表插入数据的过程能描述一下吗9.线程池&#xff0c…

两个直线/线段的交点 - golang

问题&#xff0c;求上图中线段AB 和线段CD的交点P的坐标 根据《算法艺术与信息学竞赛》&#xff0c;公式如下 原理&#xff1a; 利用叉积求得点P分线段DC的比&#xff0c;然后利用高中学习的定比分点坐标公式求得分点P的坐标 要注意的是 若判断是两条线段&#xff0c;需先判…

GPT到底有多聪明?附上一份GPT研究报告!(十七)

转载自 AI 源起 GPT的出现&#xff0c;不得不说是人类整个科技发展史上的里程碑。那么你知道GPT到底有多聪明吗&#xff1f;它的边界在哪&#xff1f;我们这个系列将为您着重阐述这一点。 人的专长、工作和经济 GPT-4在一系列任务和领域中的卓越表现将挑战关于人类和机器在…

合肥工业大学嵌入式系统原理实验报告

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a; &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远是个观众。…

Hive库表基本操作

Hive基本操作-库、表 规则语法 大小写规则: 1. hive的数据库名、表名都不区分大小写 2. 建议关键字大写 复制代码 命名规则&#xff1a; 1. 名字不能使用数字开头 2. 不能使用关键字 3. 尽量不使用特殊符号 复制代码 库操作语法 创建数据库 创建数据库的本质就是在hive…

基于UNnet(backbone=resnet34) 对 PASCAL VOC 的分割

目录 1. 介绍 2. tools 代码文件夹 2.1 get_palette 2.2 transform 3. train 部分 4. 结果展示 1. 介绍 本文使用resnet 34作为backbone代替传统unet的 vgg&#xff0c;实现对PASCAL VOC的分割 训练了两百个epoch后&#xff0c;mean iou到达了0.4左右&#xff0c;没…

如何管理银行多网点监控?用这方法就够了!

随着科技进步和生活水平的不断提高&#xff0c;人们对于餐饮消费的需求也逐渐变得多样化和个性化。 高校食堂现状分析 01.信息化水平低&#xff0c;学校管理难&#xff0c;无法精准就餐&#xff1b; 02用户满意度低&#xff0c;学生取餐环节效率低&#xff1b; 03.管理效率低…

音视频入门

1 音视频核心知识 1.1 视频录制原理 1.2 视频&#xff08;音频视频&#xff09;播放原理 2 图像基础概念 2.1 像素 2.2 分辨率 隔行扫描 逐行扫描 2.3 位深 RGB 通常每个通道用8bit表示 每个通道位深越大&#xff0c;能够表示的颜色值就越大 2.4 帧率 帧率越高&#xff…

Web的基本漏洞--CSRF漏洞

目录 一、CSRF漏洞介绍 1.CSRF漏洞原理 2.CSRF漏洞的类型 3.漏洞识别 4.漏洞攻击 5.CSRF漏洞的危害 6.CSRF漏洞防御 7.CSRF和XSS的区别 一、CSRF漏洞介绍 1.CSRF漏洞原理 CSRF&#xff08;cross site request forgery&#xff09;是指跨站请求伪造,是指利用受害者尚未…