八大排序(希尔排序)

2023-12-17

上篇文章我们来看了看插入排序是怎么实现的,本章内容就是在插入排序的基础上完成希尔排序,希尔排序是一个比较强大的排序,我们希尔排序的时间复杂度是比较难算的,这里直接给出的结论就是时间复杂度就是O(N^1.3),比较难算的原因就是我们每一次的次数都是会在变得,算起来不太方便。

这个就是希尔排序的动图,我们也是可以看到我们的希尔排序,但是图中的希尔排序gap是每次变化gap/2 还有一个也可以写成gap/3+1,我们gap == 1的时候就是插入排序了。我们可以来看看我们希尔排序的代码。

void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		for (int j = 0; j < gap; j++)
		{
			for (int i = j; i < n - gap; i += gap)
			{
				int end = i;
				int key = a[end + gap];
				while (end >= 0)
				{
					if (a[end] > key)
					{
						a[end + gap] = a[end];
						end = end - gap;
					}
					else
					{
						break;
					}
				}
				a[end + gap] = key;
			}
		}
		
	}

}

还可以写成下面的这个样子。

void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		int j = 0;
		while (j < gap)
		{
			for (int i = j; i < n - gap; i += gap)
			{
				int end = i;
				int key = a[end + gap];
				while (end >= 0)
				{
					if (a[end] > key)
					{
						a[end + gap] = a[end];
						end = end - gap;
					}
					else
					{
						break;
					}
				}
				a[end + gap] = key;
			}
			j++;
		}

	}

}

两种方式都可以。大家多看动图和调试然后看代码写吧,排序真的有点难讲。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

八大排序(希尔排序) 的相关文章

随机推荐

  • 测试用例设计方法之判定表详解!!

    理论部分 判定表 是分析和表达多种输入条件下系统执行不同动作的工具 它可以把复杂的逻辑关系和多种 条件组合的情况表达得既具体又明确 条件桩 Condition Stub 动作桩 Action Stub 条件项 Condition Entry
  • 题解 | #复制部分字符串#

    拒了华为 重回0 offer 目前在大三 寒假想找个实习 退役大学生 如题 uu们帮忙看看 25届 没有实习过 没有背过八股文 心里感觉很不稳 下学期想去暑期实习 uu们 德赛西威鸽 在中国电信公司工作一年后 我提桶跑路 东北辽宁就业求职好
  • 开题报告-基于SpringBoot互助志愿服务平台设计与实现

    一 设计课题的目的和意义 公益项目的创新 离不开以 新媒体 为载体的创新 移动新媒体的力量在中国公益界风起云涌 无论是公众抑或是公益机构都在这股新媒体力量的推动下 自觉不自觉地参与了中国公益事业的变革 随着传播媒介的不断增多 互联网时代向移
  • git代码管理学习文档

    1 版本控制 每一版本都会发生变化 更新版本 回退版本 版本控制实际就是控制文件的变化 服务器端和每个人的电脑上都会记录版本的变化 也就是说整个团队都记录了版本的变化 不需要连网 他是分布式的 在自己电脑上也可以操作 2 安装和使用Git
  • 面试了10几家软件公司测试岗位,做的面试题大盘点,重点大合集

    马上就是金三银四了 不知道小伙伴们有没有准备好呢 希望这篇文章的内容可以帮助到大家 另外文末给大家准备了资料 好几套面试题加学习资料等 需要自取 项目的测试流程 1 拿到需求文档后 写测试用例 2 审核测试用例 3 等待开发包 4 部署测试
  • 视频自动识别生成字幕难不难?这些软件操作技巧必收藏

    提问 视频自动生成字幕软件有方便快捷的吗 答案是当然有啦 你们有没有遇到过这样的情况 想要观看一段外语视频 但是却无法理解其中的对话内容 我曾经也是这样 直到我发现了一款令人惊叹的工具 它就是视频自动识别生成字幕的软件 在过去 为视频添加字
  • IDEA配置一个新项目

    git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后 项目中会出现一
  • JDK8安装教程分享

    今天 在博客社区看到一篇非常好的 关于JDK8的安装教程 亲试有用 现分享给大家 JDK8安装
  • 使用 PAI-Blade 加速 StableDiffusion Fine-Tuning

    01 背景 Stable Diffusion 模型自从发布以来在互联网上发展迅猛 它可以根据用户输入的文本描述信息生成相关图片 用户也可以提供自己喜爱的风格的照片 来对模型进行微调 例如当我们输入 A photo of sks dog in
  • [英语学习][15][Word Power Made Easy]的精读与翻译优化

    序言 这次翻译 译者还是显得啰啰嗦嗦 另外还有一个地方没有能很准确的翻译出来 英文学习的目标 提升自身的英语水平 对日后编程技能的提升有很大帮助 希望大家这次能学到东西 同时加入我的社区讨论与交流英语相关的内容 原著英文与翻译版对照 第20
  • 超详细!大模型面经指南(附答案)

    大模型应该算是目前当之无愧的最有影响力的AI技术 它正在革新各个行业 包括自然语言处理 机器翻译 内容创作和客户服务等 成为未来商业环境的重要组成部分 截至目前大模型已超过100个 大模型纵横的时代 不仅大模型越来越卷 就连大模型相关面试也
  • 可观测性是什么?新手入门指南!

    如果您之前对可观测性重要性 益处 以及组成不甚了解 本文是一个合适的指南手册 什么是可观测性 可观测性被定义为根据系统产生的输出数据 如日志 指标和链路追踪 来衡量当前系统运行状态的能力 可观测性目前被广泛的用于提升分布式 IT 系统的稳定
  • Spring AOP 和 Spring Boot 统一功能处理

    文章目录 Spring AOP 是什么 什么是 AOP AOP 组成 切面 Aspect 连接点 Join Point 切点 Pointcut 通知 Advice 实现 Spring AOP
  • 找不到concrt140.dll怎么办?concrt140.dll丢失的5个解决方法

    无法找到concrt140 dll 的错误是一种常见的Windows系统错误信息 它通常表示系统中缺少了Microsoft Visual C 2015 Redistributable中名为concrt140 dll的动态链接库文件 当我们运
  • 大模型微调技巧:在 Embeeding 上加入噪音提高指令微调效果

    大家好 在去年分享过一篇ACL2022的文章 通过微调前给预训练模型参数增加噪音提高预训练语言模型在下游任务的效果方法 NoisyTune方法在BERT XLNET RoBERTa和ELECTRA上均取得不错的效果 那么通过加入噪音的方式
  • 编写http接口api及接口自动化测试

    片言 此文中代码都是笔者工作中源码 所以不会很完整 主要摘常见场景的api片段用以举例说明 另 此文主要针对自动化测试人员 尤其有python基础阅读更佳 笔者使用 python3 6 postgresql10 flask 0 12 的环境
  • 深度学习小白学习路线规划

    作为深度学习的初学者 以下是一个建议的学习路线 可以帮助你逐步掌握图像分类 目标检测与跟踪 实例分割和姿态估计 掌握这些 计算机视觉算是入门了 1 基础知识 学习Python编程语言 它是深度学习最常用的编程语言之一 了解机器学习和深度学习
  • Deep learning 九 循环神经网络

    目前见过的所有神经网络 比如密集连接网络和卷积神经网络 都有一个主要特点 那就是它们都没有记忆 它们单独处理每个输人 在输人与输人之间没有保存任何状态 对于这样的网络 要想处理数据点的序列或时间序列 需要向网络同时展示整个序列 即将序列转换
  • 常用Web安全扫描工具合集

    漏洞扫描是一种安全检测行为 更是一类重要的网络安全技术 它能够有效提高网络的安全性 而且漏洞扫描属于主动的防范措施 可以很好地避免黑客攻击行为 做到防患于未然 那么好用的漏洞扫描工具有哪些 答案就在本文 1 AWVS Acunetix We
  • 八大排序(希尔排序)

    上篇文章我们来看了看插入排序是怎么实现的 本章内容就是在插入排序的基础上完成希尔排序 希尔排序是一个比较强大的排序 我们希尔排序的时间复杂度是比较难算的 这里直接给出的结论就是时间复杂度就是O N 1 3 比较难算的原因就是我们每一次的次数