直接插入排序

基础算法排序之增量式排序 写在之前的话,算法基础太差,可能是智商不够吧,唉那就写点什么吧!    1.插入排序        在插入排序过程中,将一个数组A看成是两个部分,第一部分为A[0..j-1],第二个部分为A[j..length-1],而插入排序算法的过程就是要将第二部分A[j]以及之后的元素插入到第一部分的数组中,而每一次的插入,A[j]元素都需要与第一部分的每个元素做比较,比较的顺序是逆序的,比如A[j]先 阅读详情

直接插入排序(straight insertion sort),有时也简称为插入排序(insertion sort),是减治法的一种典型应用。其基本思想如下:

  • 对于一个数组A[0,n]的排序问题,假设认为数组在A[0,n-1]排序的问题已经解决了。
  • 考虑A[n]的值,从右向左扫描有序数组A[0,n-1],直到第一个小于等于A[n]的元素,将A[n]插在这个元素的后面。

  很显然,基于增量法的思想在解决这个问题上拥有更高的效率。

直接插入排序对于最坏情况(严格递减的数组),需要比较和移位的次数为n(n-1)/2;对于最好的情况(严格递增的数组),需要比较的次数是n-1,需要移位的次数是0。当然,对于最好和最坏的研究其实没有太大的意义,因为实际情况下,一般不会出现如此极端的情况。然而,直接插入排序对于基本有序的数组,会体现出良好的性能,这一特性,也给了它进一步优化的可能性。(希尔排序)。直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1),同时也是稳定排序。

下面用一个具体的场景,直观地体会一下直接插入排序的过程:

场景:

现有一个无序数组,共7个数:89 45 54 29 90 34 68。

使用直接插入排序法,对这个数组进行升序排序。

89 45 54 29 90 34 68

45 89 54 29 90 34 68

45 54 89 29 90 34 68

29 45 54 89 90 34 68

29 45 54 89 90 34 68

29 34 45 54 89 90 68

29 34 45 54 68 89 90

#include<iostream>
#include<algorithm>

using namespace std;

void OutNum(int *nNum, size_t len)
{
	// 异常处理
	if (nNum == NULL)
		return;

	for (size_t i = 0; i < len; i++)
		cout << nNum[i] << ' ';
	cout << endl;
}

void InsertSort(int* nNum, int nLen)
{
	// 异常处理
	if (NULL == nNum)
		return;

	for (int i = 1; i < nLen; i++) {
		int nKey = nNum[i];

		//代表已经排过序的元素最后一个索引数
		int j = i - 1;
		while (j >= 0 && nKey < nNum[j]) {
			//从后向前逐个比较已经排序过数组,如果比它小,则把后者用前者代替,
			//其实说白了就是数组逐个后移动一位,为找到合适的位置时候便于Key的插入
			nNum[j + 1] = nNum[j];
			j--;
		}
		//找到合适的位置了,赋值,在i索引的后面设置key值。
		nNum[j + 1] = nKey;
	}
}

void InsertSort2(int* nNum, int nLen)
{
	// 异常处理
	if (NULL == nNum)
		return;

	for (int i = 1; i < nLen; i++) {
		for (int j = i - 1; j >= 0; j--) {
			if (nNum[j] > nNum[j + 1]) {
				swap(nNum[j], nNum[j + 1]);
			}
			else {
				break;
			}
		}
	}
}
int main()
{
	//int nNum[10] = {1,7,4,5,3,8,6,9,0,2};
	//int nNum[10] = { 0,1,2,3,4,5,6,7,8,9 };
	//int nNum[10] = { 0,1,2,3,4,5,6,7,9,8 };
	//	int nNum[20] = { 20,40,50,10,60, 1,7,4,5,3 };
	int nNum[20] = { 5,0,-8,2,3,4,7,-7,8,1,10,-2,-3,-4,6,-5,-6,9,-9,-1 };

	InsertSort(nNum, 20);

	OutNum(nNum, 20);
	return 0;
}

 

java实现直接插入排序 java实现直接插入排序 一、排序思想 我们假定排序是有小到大排列。直接插入排序的基本思想是:在一个已排好的记录子集的基础上,每一步将下一个待排序的记录有序的插入到已排好的记录子集当中,直接将所有待排记录全部插入位置 例如: 已知待排序的一组记录的初始排列为:{49,38,65,49,76,13,27,52} 假设在排序过程中,前三个记录按关键字递增的次序重新排列,构成了一个含有三个记录的有序序列: {38,49,65} 现在要将第四个记录49插入到上述序列,得到的有序序列: {38,**49,**49,4 阅读详情

相关推荐

spring boot 集成cas(一) 服务端搭建

简单点就是统一服务认证,多个系统一次登录。俗称单点登录。

慕孑晨的博客 1956

图解插入排序——直接插入排序算法(straight insertion sort)

直接插入排序,Straight Insertion Sort,是一种最简单的排序方法,它的基本思想就是把一个记录插入到一个有序的序列中,其基本步骤可以概括为两步:一是取出一个元素,留出空位;二是符合条件的元素右移,把取出的元素插入。那么这样的话,我们就需要一个辅助的变量来临时缓存这个被取出的变量,一般我们把这个辅助变量称之为“哨兵”。...

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 8745

告别玄学调试:手把手教你读懂全志芯片的sys_config.fex配置文件(以i2c配置为例)

本文深入解析全志芯片的sys_config.fex配置文件,以I2C设备驱动为例,详细讲解从引脚定义到驱动加载的全过程。通过实战案例和高级调试技巧,帮助开发者快速掌握硬件配置与内核驱动的联动机制,提升开发效率。

weixin_33737134的博客 418

排序算法(三) —— 直接插入排序

1. 减治法(增量法)   直接插入排序,借鉴了减治法的思想(也有人称之为增量法)。 减治法:对于一个全局的大问题,和一个更小规模的问题建立递推关系。 增量法:基于一个小规模问题的解,和一个更大规模的问题建立递推关系。      可以发现,无论是减治法还是增量法,从本质上来讲,都是基于一种建立递推关系的思想来减小或扩大问题规模的一种方法。      很显然...

weixin_30706691的博客 399

COD论文笔记VSCode: General Visual Salient and Camouflaged Object Detection with 2D Prompt Learning

VSCode模型通过引入领域特定提示和任务特定提示,结合提示区分损失,成功地在单一模型中处理多个显著目标检测和伪装目标检测任务。这种方法不仅提高了模型的性能,还展示了其对未见任务的泛化能力。作者使用 Visual saliency transformer ICCV 2021 作为baseline model这张图展示了VSCode模型的整体框架,特别强调了2D提示学习方法。

985小菜鸡 1627

spoon工具的常用基础操作

先创建一个作业,这个作业流程,包括进行设置变量转换,查询结果输出转换,方便后续循环。整个流程写完后,执行作业5_执行整个流程,成功后,可以在数据库查看结果。,新建一个转换,excel表输入然后复制记录到结果,保存转换文件。这三个用户下 都有一张emp表 分别是 三个部门的用户信息。,新建一个数据库连接,变量命名用户名和密码。成功执行后,可以到保存的excel位置进行查看。emp表输入,可以进行预览查看数据有没有过来。输出到一直excel表,运行结果输出。,新建一个转换,拖拽。

qq_43583887的博客 5831

深入理解排序算法

用最通俗易懂的语言,深入解读排序算法 **前言:**什么是排序,算法又是什么? 排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。目的是将一组“无序”的记录序列调整为“有序”的记录序列,比如说升序、降序、奇偶排序(奇升偶降、奇降偶升)等。 算法(Algorithm):是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。代表着用系统的方法描述解决问题的策略机制。一个算法的优劣可以用空间复杂度与时间复杂度来衡量,常用的算法有递推法、递归法、穷举法、贪心算法、分治法、动态规

wjkwan的博客 454

人工智能——框架表示法

1975年美国明斯基在“A framework for representing knowledge”提出了框架理论。 1. 框架及框架的一般表示形式 框架:一种描述对象属性的数据结构。 框架的一般表示形式 <框架名> 槽名1: 侧面名1:值1,值2…,值p1 侧面名2:值1,值2…,值p2 侧面名2:值1,值2…,值pm1 槽名2: 侧面名...

weixin_33759269的博客 1642

插入排序详讲:直接插入排序+希尔排序(图解+思路+代码)

插入排序~ 你能不假思索的写出来吗

WengJM的博客 340

dToF直方图之美

上面视频里如果你能看懂,那么就能理解对于dToF单点的测距问题,对于大部分的描述在AMS和ST里的手册都非常的详细,有疑问的可以后台来找我探讨,今天我们单纯从上层讨论成像的问题。作为dToF算法工程师,应该是对直方图敏感的,直方图的每个Count峰都会表征出问题,因为dToF的输出只有直方图,观察直方图能够逆推出dToF的很多东西,这也是大多数公司不愿意开放直方图和Raw data的缘故。以上是一个小面阵的分辨率,第一张是直方图,后面是基于直方图寻峰出来的成像ToF图,Peak图,以及噪声Noise图。

dream it possible 2994

Android逆向实战:通过smali/baksmali动态注入DEX逻辑

本文详细介绍了在无源码条件下对Android应用进行动态逻辑注入的实战方法。通过使用smali和baksmali工具对DEX文件进行反编译、修改与重打包,实现在目标方法中插入自定义代码(如日志打印),并分享了定位目标、处理寄存器、避免常见错误的实用技巧与避坑指南。

weixin_29008691的博客 364

插入排序:直接插入排序、希尔排序

插入排序:直接插入排序、希尔排序

2302_76314368的博客 2752

YOLO模型在STM32微控制器上的部署:1.98M参数如何塞进嵌入式设备?

<think>我们根据内容生成不超过150字的摘要。内容主要是关于YOLO模型在STM32微控制器上的部署,包括STM32N6 NPU、模型量化、工具链、开源方案和架构设计。摘要需要简洁概括主要点。 字数限制:≤150字。需要包含关键信息:STM32N6运行YOLO,困难,方案(NPU、INT8量化、工具链),性能(34 FPS 9.4mJ)。结尾可能提到开源和生态。 写中文摘要。注意不超过150字。</think>本文探讨YOLO模型在STM32微控制器上的部署。集成NPU的STM32N6搭配轻量化YOL

2601_95807009的博客 255

【排序】直接插入排序

直接插入排序

喜欢你,像风走了八千里 不问归期 566

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

内部排序之直接插入排序

本篇文章的目的是为让大家透彻的理解直接插入排序,直接插入排序作为插入排序的基础,有必要用一种简单易懂的方式让大家去掌握。

weixin_44733562的博客 517

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

直接插入排序到希尔排序做的那些改进

彻底弄明白常用的排序算法的基本思想,算法的时间和空间复杂度,以及如何选择这些排序算法,确定要解决的问题的最佳排序算法,已经总结了冒泡排序和其改进后的快速排序算法,直接选择排序和堆排序算法,下面总结直接插入排序到希尔排序做的改进,后面再继续总结归并排序和基数排序。

相信相信的力量 2755

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

直接插入排序和希尔排序

详细讲解排序算法中的直接插入排序和希尔排序

学代码的咸鱼的博客 2491

直接插入排序和简单选择排序

简单选择排序的思想: 简单选择排序的基本思想是每一趟在 n-i+1个记录中选取关键字最小的记录作为有序序列的第i个记录 直接插入排序思想: 基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录加1的有序表。 两者都是第二for循环都是不断查找,一个是不断往后找,一个在当前i,不断往前找。 简单选择排序,就是在当前选择i的时候,从后序的n-i+1个记录中查找最小的那个数,插入当前位...

weixin_39137699的博客 5053

排序(1)——直接插入排序、希尔排序

比方说我们有一个10个数的数组,最大的数在最前面,如果gap取3,最大的数跳3次就可以跳到最后一个位置,而如果gap=1,即是直接插入排序的时候,最大的数要跳10次才能跳到最后。再把7与8比较,不符合升序,8后移一个位置;先将8与9比较,9比8大,不符合升序,此时9向后移一个位置,再把8和6进行比较,符合升序,将8插入到原来9的位置。第三趟排序:此时6,8,9已经有序,要把5插入到合适的位置,把5依次与6,8,9比较,6,8,9都比5大,不符合升序,6,8,9依次后移一个位置,把5插入到原来6的位置。

2302_80106957的博客 830
上一篇: 快速排序
下一篇: 希尔排序
Maybe______
博客等级 码龄10年 26粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值