期末速成之插入排序(一)

news2024/9/23 3:24:55

文章目录

  • 1.🍉排序
    • 1.1🍈插入排序
      • 1.1.1 🍌插入排序
    • 🍌1.1.2 希尔排序

1.🍉排序

(本质:进行一个筛选)
排序在生活中的应用:
在这里插入图片描述

在这里插入图片描述

1.1🍈插入排序

1.1.1 🍌插入排序

在这里插入图片描述
单趟排序思想:排一个数,有序区间,插入一个数继续有序。
在这里插入图片描述
无序变整体有序
在这里插入图片描述
**
单趟排序

**
在这里插入图片描述

void InsertSort(int* a, int n)
{

	//[0,end]有序,把end+1位置的值插入,保持有序
	int end;
	int tmp = a[end + 1];
	while (end >= 0)
	{
		if (tmp < a[end])
		{
			a[end + 1] = a[end];
			--end;
		}
		else
		{
			break;
		}
	}
	a[end + 1] = tmp;
}

整体:
控制end的位置进而控制排序
在这里插入图片描述

void InsertSort(int* a, int n)
{
	
	//[0,end]有序,把end+1位置的值插入,保持有序
	for (int i = 0; i < n - 1; ++i)//在单趟排序的基础上加上控制end的排序
	{
	
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				--end;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}

//验证
void PrintArray(int* a, int n)
{
	for (int i = 0; i < n; ++i)
	{
		printf("%d", a[i]);
	}
	printf("\n");
}

在这里插入图片描述

在这里插入图片描述
插入排序时间复杂度:n*n
最优(顺序有序或接近顺序有序):n

🍌1.1.2 希尔排序

无序的情况下变得更快
对直接插入排序的优化

  1. 预排序(接近顺序有序)
  2. 直接插入排序(有序)
    效果非常好
    分组插入预排
    在这里插入图片描述
    gap=1时则为插入排序的单趟
void ShellSort(int* a, int n)
{
	int gap;
	int end;
	int tmp = a[end + gap];
	while (end >= 0)
	{

		if (tmp < a[end])
		{
			a[end + gap] = a[end];
			end -= gap;

		}
		else
		{
			break;
		}
	}
	a[end + gap] = tmp;
}

void ShellSort(int* a, int n)
{
	int gap=3;
	//排其他位置
	for (int j = 0; j < gap; ++j)
	{
		//先控制红色一组,控制end的位置
		for (int i = 0; i < n - gap; i += gap)
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

void ShellSort(int* a, int n)
{
	int gap=3;
		for (int i = 0; i < n - gap; ++i)//简化,gap组数组交替插入排序
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

升序,gap越大,大的数可以更快的到后面,越不接近有序

升序,gap越小,大的数可以更慢的到后面,越接近有序

gap与n相关,

void ShellSort(int* a, int n)
{
	//gap>1时是预排序
	//gap最后一次等于1,直接插入排序。最后一次保证他有序
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;//保证最后一次一定是1。2/3=0
//log3 n

		for (int i = 0; i < n - gap; ++i)
		{
			int end;
			int tmp = a[end + gap];
			while (end >= 0)
			{

				if (tmp < a[end])
				{
					a[end + gap] = a[end];
					end -= gap;

				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}

}

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

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

相关文章

AN13189-移植

AN13189.pdf 2简介 本文件提供了从软件角度将基于PN7160 NXP NCI的NFC控制器集成到Android平台的指南。 它首先解释了如何安装所需的内核驱动程序&#xff0c;然后逐步描述了如何调整Android开源项目源代码以添加PN7160 NFC控制器的支持。图1显示了整个Android NFC堆栈的架构。…

【程序】基于simulink车辆动力学可视化仿真

一、前言 车辆动力学是研究汽车在行驶过程中的运动学和力学特性的学科。它研究车辆在不同路面条件、不同驾驶情况下的加速、制动、转向等运动状态&#xff0c;并通过建立数学模型来分析和优化车辆的性能和安全性。车辆动力学是汽车工程、机械工程和物理学等学科的交叉领域&…

基于SpringBoot的SSM整合案例 -- SpringBoot快速入门保姆级教程(四)

文章目录 前言1.设计创建数据库表tbl_book2.创建新的SpringBoot模块&#xff0c;勾选相关依赖3. 添加SpringBoot创建项目时没有提供的相关坐标4.根据数据库表创建实体类Book5.编写dao层操作BookDao6.编写Service服务层接口BookService7.编写服务层实现类BookServiceImpl8.编写B…

AI催生电影新纪元?大咖们纷纷发声|瞩目上影节

AI催生电影新纪元&#xff1f;大咖们纷纷发声&#xff5c;瞩目上影节 听说“谁懂AI&#xff0c;谁股票就飙高”。博纳影业集团创始人兼总经理于冬一句话引得会场爆笑连连。 AI成为今年上海国际电影节热议话题之一。在金爵电影论坛开幕论坛上&#xff0c;于冬、中国电影股份有限…

keyclock==纯java实现第三方登录

官网Guides - Keycloak 下载 Downloads 18.0.0 - Keycloak GitHub: https://github.com/keycloak/keycloak/tags?after17.0.1 1-安装启动 参照readme文件 启动 bin\kc.bat start-dev 初始化超管账号密码admin admin 参考官方教程 OpenJDK - Keycloak 打开超管界面h…

Mac 上的搜狗输入法卡顿问题

我的 Mac 使用的中文输入法是搜狗拼音输入法&#xff0c;一直有一个问题&#xff0c;就是 Mac 开机太久&#xff0c;输入法会出现卡顿问题&#xff0c;按下按键 0.5s 后需才会显示对应的汉字&#xff0c;用着非常难受&#xff0c;以前这种情况我都是通过重启 Mac 来解决&#x…

Python算法练习6.18

leetcode 1431 拥有最多糖果的孩子 给你一个数组 candies 和一个整数 extraCandies &#xff0c;其中 candies[i] 代表第 i 个孩子拥有的糖果数目。 对每一个孩子&#xff0c;检查是否存在一种方案&#xff0c;将额外的 extraCandies 个糖果分配给孩子们之后&#xff0c;此孩…

全国大数据与计算智能挑战赛:面向低资源的命名实体识别基线方案,排名13/64,组织单位:国防科技大学系统工程学院(大数据与决策实验室)

NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等 专栏详细介绍:NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型…

管理类联考——英语二——技巧篇——写作——B节——图表作文——必备词汇句型

图表作文必备词汇句型 1&#xff0e;该表格展示了…… The table reveals The table demonstrates The table shows The table depicts The tableillustrates The table presents The table describes 2&#xff0e;占…… Comprise Take up Account for Constitute C…

【MySQL】不就是索引

前言 嗨&#xff01;小伙伴们周末快乐呀&#xff01;想必你们周末都在家里边呆着吧&#xff0c;外面实在是太热了&#xff01;在家里吹着空调做着自己喜欢做的事情吧&#xff01;本期我们主要学习的是MySQL中的约束条件。 目录 前言 索引概述 外键约束 1.概念 2.语法 1.添加…

机器学习的学习准则(期望风险最小化、经验风险最小化、结构风险最小化)

训练集是有N个独立同分布的样本组成&#xff0c;即每个样本(x,y)是独立的从相同的分布中抽取的。这个真实的分布未知 输入空间X和输出空间Y构成样本空间&#xff0c;对于样本空间中的样本(x, y)∈X x Y&#xff0c;假定x和y之间可通过一个未知的真实隐射yg(x)来描述&#xff0…

九、提交代码自动触发Jenkins构建版本

提交代码自动触发Jenkins构建版本 1. 下载Generic Webhook Trigger 2. 配置Generic Webhook Trigger http://JENKINS_URL/generic-webhook-trigger/invoke?tokenruoyi-ui-8978456465 http://192.168.1.183:8080 为jenkisn地址&#xff0c;/generic-webhook-trigger/invoke?…

学习潘海东博士的《潮汐调和分析原理和应用》

潘海东博士在B站&#xff08;用户名&#xff1a;ocean_tide&#xff09;分享了他的电子书《潮汐调和分析原理和应用》&#xff0c;以及他开发的潮汐调和分析工具包S_Tide&#xff0c;非常厉害。 在学习《潮汐调和分析原理和应用》之前&#xff0c;我们需要安装matlab软件。 1 、…

阿里云免费服务器申请流程、领取入口、主机配置及限制条件

阿里云服务器免费试用申请链接入口 aliyunfuwuqi.com/go/free 阿里云个人用户和企业用户均可申请免费试用&#xff0c;最高可以免费使用3个小时&#xff0c;阿里云服务器网分享阿里云服务器免费试用申请入口链接及云服务器配置&#xff1a; 目录 阿里云服务器免费试用 企业…

高通 Android 12 调试产测NFC功能

1、在dev/nxpnfc节点添加对应的文件权限 on property:sys.boot_completed1# nfc add by zmchmod 777 /dev/nxpnfc 2、在vendor/nxp/nfcdevice-nfc.mk文件中 修改NFC添加到编译路径如下所示,跟平时内置apk方式有点类似 PRODUCT_PACKAGES NFCTestApp-include \vendor\nxp\nfc\…

powerdesigner简单使用

批量修改表名schema vb里面好像没有!的功能&#xff1f;我之前疯狂报错&#xff0c;直到把"!“改成了”<>"; table中的字段名&#xff0c;似乎用下面的界面就可以调用&#xff1b; 推荐找一些vbs的语法记录看一下 批量加入前缀后&#xff0c;所有的表名竟然…

微服务开发系列 第十二篇:MongoDB

总概 A、技术栈 开发语言:Java 1.8数据库:MySQL、Redis、MongoDB、Elasticsearch微服务框架:Spring Cloud Alibaba微服务网关:Spring Cloud Gateway服务注册和配置中心:Nacos分布式事务:Seata链路追踪框架:Sleuth服务降级与熔断:SentinelORM框架:MyBatis-Plus分布式任…

英语时态的变化

思考&#xff1a;汉语和英语是靠什么来说明时态的 汉语和英语关于时态的区别 汉语英语1.人们采取行动。&#xff08;一般状态&#xff09;People take actions.&#xff08;动词&#xff0c;注意动词的变化&#xff09;2.人们正在采取行动。&#xff08;正在进行&#xff09;P…

window中断/连网操作的命令提示符

window中断/连网操作的命令提示符 通过 cmd 实现网络查看与断/联网 以管理员身份打开命令提示符查看计算机网络接口名称 netsh interface show interface断网操作 # netsh interface set interface "你想断开的接口名称" admindisable netsh interface set inter…

【MySQL数据库】事务和存储引擎

【MySQL数据库】事务和存储引擎 一&#xff0c;事务1事务的概念 二 、事务的ACID特点2.1原子性2.2一致性&#xff08;Consistency&#xff09;2.3隔离性2.4持久性 三、脏读、不可重复读、幻读、丢失更新3.1脏读3.2不可重复读3.3幻读3.4丢失更新 四、事务的隔离级别事务隔离级别…