C++实现插入排序全过程

C++ 插入排序——直接插入排序 详解 插入排序也是最简单的一类排序方法,我今天介绍的也是插入排序里最直观且浅显易懂的直接插入排序。对这个很简单的排序,记得当时也是花了近两个晚上才搞懂它的原理的,接下来就来介绍一下我的思路: 我曾经也在网上搜索了很多别人写的博客也百度看了别人的想法,但怎么说呢,大概是一百个人就会有一百种想法,也可能是我没有看到正中我心意的那一篇博客,导致看了很多别人写的代码以及图片示例都没有解决我心里的疑问和不解。现在我就来写一下我对这个排序的理解,希望曾经跟我一样有这样疑问的朋友,能在我的博客里找到答案。 直接上例子,通过 阅读详情

C++实现插入排序

大家好,第一次发表自己的文章。初心是想为学习算法的朋友提供力所能及的帮助。本次带来的是插入排序。
插入排序的思想很简单,将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。

过程分析

比如我们要实现顺序的数组是a[]={9,3,4,2,6,7,5,1};

那么我们可以把他们每一趟的顺序来写出来
其过程:
//插入排序
//第一趟: 9 3 4 2 6 7 5 1
//第二趟: 3 9 4 2 6 7 5 1
//第三趟: 3 4 9 2 6 7 5 1
//第四趟: 2 3 4 9 6 7 5 1
//第五趟: 2 3 4 6 9 7 5 1
//第六趟: 2 3 4 6 7 9 5 1
//第七趟: 2 3 4 5 6 7 9 1
//第八趟: 1 2 3 4 5 6 7 9

在这里我们可以观察到一共需要比较n-1次;
那么我们把第n趟(包括n)之前的元素称为有序组,之后的元素称为无序组。
我们只需要用变量biaobing来记录无序组中的第一个元素。
利用变量j来记录有序组中的最后一个元素。

下面展示代码

#include<iostream>

using namespace std;

//插入排序
//1: 9 3 4 2 6 7 5 1
//2: 3 9 4 2 6 7 5 1
//3: 3 4 9 2 6 7 5 1
//4: 2 3 4 9 6 7 5 1
//5: 2 3 4 6 9 7 5 1
//6: 2 3 4 6 7 9 5 1
//7: 2 3 4 5 6 7 9 1
//8: 1 2 3 4 5 6 7 9 
void InsertSort(int *a,int n)
{
	for(int i=1;i<n;i++)
	{
		int biaobing=a[i];	//无序组的第一个元素 
		int j=i-1;			//有序组的最后一个下标 
		while(j>=0&&biaobing<a[j])
		{
			 a[j+1]=a[j];
			 	cout<<"第"<<i<<"趟的标兵是"<<biaobing<<",向后移动时:" ;
			 	for(int i=0;i<8;i++)
				cout<<a[i]<<" ";
				cout<<endl;
			 j--;
		}
		a[j+1]=biaobing;
		cout<<"第"<<i<<"趟标兵到达准确位置之后:"; 
			for(int i=0;i<8;i++)
				cout<<a[i]<<" ";
				cout<<endl;
	}
}

int main()
{	
	int a[]={9,3,4,2,6,7,5,1};
	InsertSort(a,8);
	for(int i=0;i<8;i++)
		cout<<a[i]<<" ";
	cout<<endl;
	return 0;
} 

执行结果:
在这里插入图片描述

c++十大排序——插入排序 算法基本知识铺垫 有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下: 1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序 2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。 3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储 空间进行比较和交换的数据排序。 4、非原地排序:需要利用额外的数组来辅助排 阅读详情

相关推荐

【插入排序】c++实现插入排序代码

插入排序的基本思想:从第二个元素开始,找到元素的正确位置并插入,直到最后一个元素,则完成排序。就像扑克牌,每拿一张扑克牌都将其插入到正确的位置,拿完所有扑克牌后其为有序状态。 程序代码如下: #include&lt;iostream&gt; using namespace std; void print(int a[], int n) { for(int j= 0; j&lt;...

yangchuang93的博客 9697

红黑树的插入全过程图化

本篇是在之前的学习插入时的补充篇幅。目标时从头图化出一个完整的红黑树的构造过程。 理论参考 构建过程中随机生成一个数字作为红黑树的域。 Case场景分为两种,一种是CaseA1,2,3系列,一种是CaseB1,2,3系列,具体参见理论参考中的修正操作伪代码。 插入节点275。 没啥好说的,根节点了,黑色。 插入节点711。 插入节点260。 插入节点515(满足Case...

lwgzj的博客 5085

简单排序——插入排序(C++)

故事从今天开始:小天狼星正在翻看自己的排序专栏,突然发现我的专栏中竟然没有插入排序!!于是,马上安排!

小天狼星_布莱克 的博客 3133

C++插入排序

#include <iostream> using namespace std; void insertSort(int arr[],int len){ int i,j,temp; for(i=1;i<len;i++){ for(j=i;j>0;j--){ if(arr[j]<arr[j-1]){ temp = arr[j]; arr[j] = arr[j.

小灰的博客 204

C++实现插入排序算法

控制语句是C++程序设计中用来控制程序流程的语句,常见的控制语句包括条件语句(if, switch)和循环语句(for, while, do-while)。函数是C++中实现代码复用的基本单位,包括标准库函数和用户自定义函数。// 条件语句示例// 如果a大于b,则执行这里的代码块// 如果a小于b,则执行这里的代码块} else {// 如果a等于b,则执行这里的代码块// 循环语句示例i < 10;i++) {// 在循环中执行的代码块// 函数定义示例// 返回x和y的和。

weixin_34598113的博客 842

matlab电容式传感器仿真,差动电容式位移传感器的仿真研究

设计了一种差动电容式位移传感器,主要对传感器的数学模型及电容检测电路进行了仿真研究。其中检测电路设计主要包括正弦激励电路、转换桥路、信号放大电路、精密整流电路和滤波电路。最后利用Matlab/SimurFnk软件对所设计的系统进行仿真,并分析了传感器性能。仿真研究表明,传感器及其检测电路具有合理性,测量范围内具有很好的线性度。0|| I≯ lat on ii{差动容尊翩’亘研发注:湖南省教育厅资...

weixin_36323601的博客 1390

插入排序法

#include iostream> #include time.h> using namespace std; const int MAX=10; void InsertSort(int a[]);//插入排序法声明 int main() ...{     int Number[MAX]=...{0};//初始化一个包含10个元素的零数组;     srand(time(NU

yjz1409276的专栏 684

从零到一:RF-DETR如何通过神经架构搜索重塑实时目标检测的边界

RF-DETR通过创新的权重共享神经架构搜索(NAS)机制,重新定义了实时目标检测的技术边界。这项技术在COCO等基准测试中表现卓越,成为首个AP超过60的实时检测器,同时保持跨领域稳定性和高效推理速度。RF-DETR的动态架构调整能力使其能够适应从嵌入式设备到云端服务器的各种硬件环境,为工业质检、自动驾驶等场景提供灵活解决方案。

weixin_29061531的博客 469

1051. 插入排序

#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn=111111; int maxx=-0x3f3f3f3f; int n,a[maxn]; void insertsort() { int j; for(int i=2;i<=n;i++) { int t=..

Rachelhello123的博客 142

COMSOL多物理场仿真:瓷绝缘子电热耦合建模与优化策略

本文详细介绍了使用COMSOL Multiphysics进行瓷绝缘子电热耦合仿真的完整流程与优化策略。文章阐述了电热耦合效应的工程意义,并逐步讲解了从几何建模、材料定义、物理场设置到边界条件与网格划分的关键步骤。重点分析了如何通过焦耳热耦合实现电场与温度场的双向交互,以及如何利用仿真结果进行参数化优化和瞬态故障模拟,为提升电力设备可靠性提供有效的数字化设计工具。

n8m7b6v5c4的博客 883

嘉立创封装图下载后必做的3步优化(附批量删除机械层技巧)

本文针对从嘉立创下载的封装图,系统讲解了三步核心优化流程,以解决其直接使用时的常见问题。重点介绍了如何高效批量删除冗余的机械层,避免制造错误;并详细说明了规范丝印层间距、统一焊盘命名等关键步骤,帮助工程师将第三方封装转化为可靠、合规的设计资源,从而提升PCB设计效率与文件质量。

weixin_29227585的博客 433

使用指针的插入排序(C++)

题目详情 编写函数,使用指针对一维整型数组进行插入排序。要求函数中不出现下标运算。 编写主函数,输入若干整数,以-9999为结束标志。调用函数排序,在主函数中输出。元素总个数不超过100个。 输入格式: 若干用空格隔开的整数,以-9999为结束标志。 输出格式: 用空格隔开的从小到大排序的整数,用空格隔开,末尾无空格。 输入样例: 20 4 3 10 34 -9999 ...

努力学习的DS 1864

Win本地部署DeepSeek

Ollama 提供了简单的接口,用于创建、运行和管理这些模型,同时还维护了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。重启ollama,具体操作为打开搜索ollama进程,将其结束进程,之后再执行相关模型下载命令即可,或重启电脑!Ollama支持多种DeepSeek模型版本,用户可以根据硬件配置选择合适的模型。配置添加系统环境变量OLLAMA_MODELS,设置其值为新的路径,点击确定应用。安装完成后,在终端输入以下命令,检查Ollama版本。:14B、32B或70B版本,适合高端GPU。

m0_67297673的博客 2391

表插入排序

#include&lt;iostream&gt; using namespace std; #define SIZE 100 typedef struct { int data; int next; }SLNode; typedef struct { SLNode r[SIZE]; int length; }SLinkListType; void Build(SLinkListTyp...

summersunrain的博客 279

小梅哥Xilinx FPGA学习笔记11——亚稳态

亚稳态就是D触发器输入信号在其数据窗口期内发生变化,导致D触发器的输出进入一段时间的不稳定状态,有可能发生振荡,并最终随机稳定在高电平或者低电平。

m0_51430584的博客 631

安路TangDynasty和FD和JTAG驱动器安装

安路FPGA产品矩阵包含SALPHOENIX高性能、SALEAGLE高性价比和SALELF低功耗三大系列,广泛应用于网络通信、消费电子等领域。配套的TangDynasty(TD)集成开发环境支持标准设计输入,提供完整优化流程与调试工具。简要介绍了TD 6.2.1版本的安装步骤。

wangjie36的博客 1038

排序之插入排序(C++实现)

插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到{\displaystyle O(1)}的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 ...

xiu351084315的博客 1万+

ChatGPT充值,银行卡被拒绝,图文教程

ChatGPT充值,银行卡被拒绝

weixin_46713695的博客 2万+

C++算法之插入排序

C++算法之插入排序 文章目录C++算法之插入排序一、算法描述二、代码实现三、复杂度分析 一、算法描述 整理插入排序算法描述如下: 枚举序列中第2~n个元素。 当枚举元素i时,前i-1个元素已经有序。将第i个元素插入到前i-1个元素的有序序列中,形成长度为i的有序序列。 枚举过程结束后,整个序列有序。 在上述算法描述中,我们有个关键的步骤——插入操作:将第i个元素插入到前i-1个元素的有序序列中,形成长度为i的有序序列。 怎样实现这个过程呢? 一种实现思路和前面介绍的“火车站插队”过程十分类似。比如

R_mine的博客 5872

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

c++插入排序算法实现

c++插入排序算法实现 插入排序 //插入排序C++实现,时间复杂度N2 #include <iostream> #include <cstdlib> #include <ctime> #include <Windows.h> using namespace std; int main() { DWORD start_time = GetTic...

tiansch的博客 1146

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++实现折半插入排序

在“C++实现直接插入排序 ”中,由于插入排序的基本操作是在一个有序表中进行查找和插入,则这个“查找”操作可以利用“折半查找”来实现,由此进行的插入排序称之为折半插入排序 实现如下: #include using namespace std; #define SIZE_A 9 int main(){ void myshow(int* p,int length);//函数提前声明

cxcbupt 2312

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C/C++实现插入排序(三种方式)

介绍 插入排序有点像打扑克牌,每次获得一张牌,我们就插入到这个有序序列的合适位置。 用数组来看的话就是下面这个样子:   实现(三种方式) 方式一 经常用到的一种方式 //普通的插入排序 void InsertSort1(int A[],int n){ int i,j,temp; for(i=1;i<n;i++){ if(A[i]<A[i-1]){ temp=A[i]; for(j=i-1;j>=0&&A[j]>temp;--j){

weixin_44915226的博客 7268

插入排序的三种C++实现方法详解

插入排序虽然在大规模数据排序中效率不高,但其简单直观、空间效率高的特点使其在特定场景下仍有应用价值。直接插入排序:实现最简单,适合教学和小数据集二分插入排序:减少了比较次数,适合比较操作代价高的场景希尔排序:性能最好,是插入排序家族中最实用的变种希望这篇博客能帮助你更好地理解插入排序的三种实现方法!

guq511的博客 1042

插入排序(C++实现)

插入排序(C++实现) 前一节写了冒泡排序算法,这节来说下插入排序算法。 插入排序算法的时间复杂度和冒泡排序一样,都是O(n^2)。 插入排序算法的思想是:将整个数组a分为有序和无序的两个部分。前者在左边,后者在右边。开始有序的部分只有a[0] , 其余都属于无序的部分。每次取出无序部分的第一个(最左边)元素,把它加入有序部分。假设插入合适的位置p,则原p位置及其后面的有序部分元素都向右移动一个位置,有序的部分即增加了一个元素。一直做下去,直到无序的部分没有元素。 具体代码实现如下: // An highl

weixin_42432402的博客 649
下一篇: C++实现快速排序
AlonScholar
博客等级 码龄7年 25粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值