算法之路--直接插入排序算法

news2024/10/6 8:34:26

        在介绍插入排序算法之前,先举证一个我们都熟悉不过的例子即可理解插入排序。我们在打牌的时候,由于每次抽到的牌大小不一,为了在出牌时了解自己手里都还剩什么牌型,所以每次对抽到的新牌都会做一个排序,怎么比较呢,就是把新拿到的牌和已有的牌一一比对,按照从小到大进行排列,这恰恰就是插入排序的精髓。这样一讲是不是就很好理解插入排序了[手动狗头]。

算法思路

        插入算法的思路就是在分别从第二个元素开始与前面的元素进行比较,发现大的数后,大的数进行后移,将当前待比较的数插入到其前面(因为第一个元素左侧没有元素,也就自然认为它就是最小的了)。然后依次类推,进行第3.4.5...位分别与前面的已经排序好的元素进行比较,一直到最后一个元素完成比较插入,则完成插入排序。 核心思想就是:与前面已经排列好的元素队列进行分别比较。

step1 以第2位的4为哨兵,与所有它前面位置的数进行比较,2>4 不需要后移,哨兵后移换后第3位24135
step2 1为哨兵,与4比较,4后移,1插入24135
step3 1为哨兵,与2比较,2后移,1插入,到达最左侧,完成本轮,哨兵位后移到第4位21435
step4 3为哨兵,与4比较,4后移,3插入12435
step5 3为哨兵,与2比较,前面均为已经排序好,不需要再比较,哨兵后移到最后一位12345
step6 5位哨兵与前面已经排列好的位置比较,不需要发生插入12345
完成插入排序12345

 

上图中红色为哨兵位,即比较位,绿色为待比较位,蓝色为完成比较

C++示例代码

#include <iostream>
#include <vector>
using namespace std;

void insertSort(vector<int> &v)
{
	int len = v.size();
	if (len < 2)
	{
		return;
	}
	int i = 1;
	while (i < len)
	{
		int insetObj = v[i];
		int j = i - 1;
		while (j >= 0 && v[j] > insetObj)
		{
			v[j + 1] = v[j];
			j--;
		}
		v[j + 1] = insetObj;
		i++;
	}
}

int main()
{
	vector<int> vec{4,2,11,1,5,65,88,43,12,3,4};
	insertSort(vec);

	system("pause");
	return 0;
}

时间复杂度和空间复杂度

        直接插入排序算法的时间复杂度也要视实际的数组排列顺序不同而不同,最差的情况就是一个倒序的数组,即54321的方式排列,这样需要每次都进行一次比较和移动,时间复杂度为O(n²),

最优的情况就是顺序为12345..这样只需要遍历一遍即可,时间复杂度为O(n)。如果排序记录是随机的,根据概率相同的原则,平均比较和移动的次数约为n^2/4次。因此,直接插入排序算法时间复杂度为O(n²)。

        由于是移动解决问题,所以开辟的空间也只有一个,所以为O(1)。

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

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

相关文章

AWS 中的另外一种远程工具 AWS Session Manager

作者&#xff1a;SRE运维博客 博客地址&#xff1a;https://www.cnsre.cn/ 文章地址&#xff1a;https://www.cnsre.cn/posts/230129126154/ 相关话题&#xff1a;https://www.cnsre.cn/tags/aws/ 背景需求 因为项目的安全性。为了避免项目的服务器暴露在公网中。很多时候我们…

设计原则之【迪米特法则】,非礼勿近

文章目录 一、什么是迪米特法则1、理解迪米特法则2、如何理解“高内聚、松耦合”&#xff1f; 二、实例1、实例12、实例2 一、什么是迪米特法则 迪米特原则&#xff08;Law of Demeter LoD&#xff09;是指一个对象应该对其他对象保持最少的了解&#xff0c;又叫最少知道原则&…

支付系统设计三:渠道网关设计01-总览

文章目录 前言一、开发框架二、E-R图三、管理后台配置四、运行时执行流程五、屏蔽渠道差异总结 前言 在《支付系统设计一&#xff1a;支付系统产品化》文章中&#xff0c;我们知道支付渠道网关主要具有以下功能&#xff1a; 统一支付出口&#xff0c;提供丰富的支付工具原子能…

详解:扫雷游戏的实现

扫雷游戏的实现 设置雷排查雷标记雷打印棋盘初始化棋盘获得雷的个数扩展区域test.c的实现meni.c的实现meni.h的实现 铁汁们&#xff0c;今天给大家分享一篇扫雷游戏的实现&#xff0c;来吧&#xff0c;开造⛳️ 1.需要存储雷的信息&#xff0c;创建二维数组来存储数据信息&…

gateway的使用

什么是Spring Cloud Gateway 网关作为流量的入口&#xff0c;常用的功能包括路由转发&#xff0c;权限校验&#xff0c;限流等。 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架&#xff0c;定位于取代 Netflix Zuul。相比 Zuul 来说&#xff0c;Spring Cloud …

第1章 量化设计与分析基础

1.1 引言 如今一台价格不足500美元的手机&#xff0c;性能便堪比1993年世界上最快的售价5000万美元的计算机&#xff0c;这种快速发展既得益于计算机制造技术的发展&#xff0c;也得益于计算机设计的创新。 纵观计算机发展的历史&#xff0c;技术一直在稳定地提升&#xff0c…

【COT】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

文章目录 主要解决什么问题采用什么方法实验分析与结果消融实验Commonsense ReasoningSymbolic Reasoning 问题与展望 Chain-of-Thought Prompting Elicits Reasoning in Large Language Models 主要解决什么问题 大语言模型越来越大&#xff0c;效果越来越好。但是在一些具有…

Sui Builder House首尔站|主网上线后首次亮相

Sui Builder House提供与全球Sui构建者会面、合作并学习Sui平台前沿技术的机会。Sui基金会计划将于2023年在全球12个城市举办Sui Builder House。截止目前&#xff0c;已成功在美国丹佛市、越南胡志明市和中国香港举办三场Builder House活动。 Sui Builder House首尔站将于6月…

【D435i深度相机YOLO V5结合实现目标检测】

【D435i深度相机YOLO V5结合实现目标检测】 1. 前言2 分析2.1 关于yolo部分2.2 关于获取三维坐标的部分2.3 关于文件结构部分 3. 代码 1. 前言 参考&#xff1a;Ubutntu下使用realsense d435i&#xff08;三&#xff09;&#xff1a;使用yolo v5测量目标物中心点三维坐标 欢迎大…

满意度指标- NPS 的ABtest(公式推导)

&#x1f449;A 组的NPS如下 &#x1f449;B 组的NPS如下 &#xff08;下标为1&#xff0c;均为A组的样本数据&#xff1b;下标为2&#xff0c;均为B组的样本数据&#xff09; 要验证A\B两组的NPS差异是否显著&#xff0c;可通过假设检验。 一、假设检验前置准备 1. 选择…

FastDFS理论与Java程序的对接(图片,文件上传)

目录 fastdfs概述Java程序对接fastDFSpom配置java启动类注解yaml文件配置controller类service类 fastdfs概述 什么是分布式文件系统&#xff1f; 是指文件系统管理的物理存储资源不一定直接连接在本地节点上&#xff0c;而是通过计算机与节点相连。 通俗来讲&#xff1a; 传统…

【medini analyze 软件介绍】

medini analyze 软件介绍 简介主要功能&#xff08;功能安全范畴&#xff09;1、HARA2、建模3、FMEA & FMEDA4、FTA*这里只是笔者根据汽车功能安全分析经验简单列举了medini analyze的部分功能&#xff0c;完整的功能介绍请参考ANSYS官网* 简介 medini analyze是一款专业的…

怎么把pdf文件压缩到最小?四招快速压缩!

怎么把pdf文件压缩到最小&#xff1f;平常我们要压缩一个文件&#xff0c;一般都知道该如何操作。系统中自带了压缩工具&#xff0c;只需右键点击需要压缩的对象并选择"压缩"选项即可完成操作。然而&#xff0c;很多人也会发现&#xff0c;尽管大部分的文件都可以通过…

网络安全公司Dragos披露网络安全事件

工业网络安全公司 Dragos 披露了它所称的“网络安全事件”&#xff0c;此前一个已知的网络犯罪团伙试图突破其防御并渗透到内部网络以加密设备。 虽然 Dragos 表示威胁行为者没有破坏其网络或网络安全平台&#xff0c;但他们可以访问公司的 SharePoint 云服务和合同管理系统。…

05-HTML-图片标签

<img> 标签&#xff1a;src 属性是必需的。它规定图像的 URL。 绝对 URL - 指向另一个网站&#xff08;比如 src"http://www.example.com/image.gif"&#xff09;相对 URL - 指向网站内的一个文件&#xff08;比如 src"image.gif"&#xff09; <…

网络层最重要的协议—IP协议

网络层最重要的协议—IP协议 IP协议格式解决IP地址不够用问题的三种方法方法一: 动态分配IP地址方法二: NAT网络地址转换方法三: IPv6(根本上解决IP不够用的问题)小结&#xff1a; IP协议之地址管理主机号/网络号子网掩码特殊IP IP协议格式 4位版本&#xff1a;此处取4或64位首…

sort ,uniq ,tr ,cut命令

目录 一、sort命令 1.格式 2.命令演示 2.1 选项 -n :按照数字大小排序 2.2选项 -r &#xff1a;反向排序 2.3选项 -u&#xff1a;隐藏多余行 2.4选项 -t &#xff1a;指定分隔符&#xff1b;-k &#xff1a;指定字符&#xff1b;-o &#xff1a;指定保存文件 二、uniq命令…

Git的安装与版本控制

这里写目录标题 原理安装基本使用gitee-IDEA协同开发成员邀请开发组成员指定仓库权限给当前仓库设定分支提交代码时必须向自己的分支提交合并分支 - 无冲突 原理 Git本地有四个工作区域&#xff1a; 工作目录&#xff08;Working Directory&#xff09;、暂存区(Stage/Index)、…

【Linux】笔记分享

目录 - 前言- 目录结构- 磁盘文件系统- 文件权限 ls -l 的内容文件及目录权限实际案例 修改权限 -chmod[change ...]第一种方式&#xff1a; 、-、 变更权限第二种方式&#xff1a;通过数字变更权限 修改文件所有者 -chown 修改文件所在组 -chgrp - 命令类型基础命令网络性能…

【数据类型-列表】------- PYTHON基础9

内容目录 一、数据类型-列表1. 列表1.1. 列表的截取 result List[start:end:step]1.2. 列表元素的修改 List[index] element1.3. 列表元素的删除 del List[index] 或 del List[start:end:step]1.4. 列表元素的拼接 “” 或者增量赋值运算符 “” 2. 列表常用内置函数 对象.内…