希尔排序的实现

news2024/9/20 18:44:37

希尔排序是插入排序的一种升级,其基本思想是:

先选定一个整数,把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内,并对每
一组内的记录进行排序。然后,取,重复上述分组和排序的工 作。当到达=1时,所有记录在统一
组内排好序。
本质就是在插入排序之前进行几次预排序,让数组中的数相对比较有序,通过插入排序的讲解我们
知道,越有序其时间复杂度越低,那么我们应该如何进行预排序呢?

上图中就用了两次预排序来使其尽量有序,最后再直接插入排序来降低时间复杂度,插入排序的具

体实现在我之前的博客中提到了:

思路如下:

 

 插入排序代码如下:

void InsertSort(int* a, int n)
{
	for (int i = 1; i < n; i++)
	{
		int end = i-1;
		int tmp = a[i];
		while (end >= 0)
		{
			if (tmp < a[end])
			{
				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		}
		a[end + 1] = tmp;
	}
}

而希尔排序就是把插入排序作为单趟,俩进行分组排序,多一次分组排序(预排序)就在最后一

次插入排序中少走一些弯路,降低时间复杂度。

希尔排序的代码实现:

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

其实希尔排序就是插入排序的优化,通过多次插入排序来降低其时间复杂度,这就是希尔排序。

时间复杂度为O(N*logN)。 

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

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

相关文章

可执行Jar项目

一个复杂Jar的运行&#xff0c;要解决classpath问题&#xff0c;否则运行时会有ClassNotFoundException抛出。而用java&#xff0c;需要手动维护一个classpath文件&#xff0c;或者将所有的库位置放到命令行参数里。有没有更好的办法&#xff1f; Jar库目录方式 核心配置在于两…

算法训练Day40:343. 整数拆分 96.不同的二叉搜索树

文章目录 整数拆分题解&#xff08;动态规划&#xff09;贪心 不同的二叉搜索树题解 整数拆分 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (62.22%)11660--0 Tags 数学 | 动态规划 Companies 给定一个正整数 n &#xff0c;将其拆分为…

推荐几个免费的在线文本转语音网站(支持中英文多种语音)

如果你正在寻找一款免费的在线文本转语音工具&#xff0c;那么你来对地方了&#xff01;本文将介绍几个完全免费的在线文本转语音网站&#xff0c;推荐收藏下来以备不时之需。 No.1 免费文本转语音&#xff08;TTSMaker&#xff09; TTSMaker是第一个推荐的工具&#xff0c;这…

院内导航方案怎么样?什么地图可以用于医院导航系统?

什么地图可以用于医院导航系统&#xff1f;随着医疗事业的不断发展&#xff0c;医院的建制规模越来越大&#xff0c;在医疗能力得到增强的同时&#xff0c;由于楼宇众多&#xff0c;院内寻路难度难免增加。不少前来医院就诊的患者经常会有“寻路难”的困扰。此时一张一目了然的…

从在线监测与故障诊断系统视角,探讨动设备安全运行的重要性

在工业生产中&#xff0c;动设备是生产线的重要组成部分&#xff0c;但是随着设备运行时间的不断延长&#xff0c;设备的损耗逐渐加大&#xff0c;设备故障和损坏的风险也随之增加&#xff0c;给生产效率和安全带来不小的影响。因此&#xff0c;如何保证动设备的安全运行成为了…

更简单的存取Bean的方式(一)-五大类注解

目录 使用类注解 前置工作 Bean命名规则 五大类的实现 JavaEE标准分层 之前我们存储Bean时,是在spring-config.xml文件中添加bean注册内容来实现的 通过"注解"我们可以替代这一项工作 更加简单的存储方式: 使用类注解 五大类注解: Controller(控制器):用来控制…

常用的倾斜摄影三维模型3DTILES格式优缺点分析

常用的倾斜摄影三维模型3DTILES格式优缺点分析 三维模型3DTILES格式是一种用于描述三维模型和场景数据的标准格式&#xff0c;具有以下优点和缺点&#xff1a; 优点&#xff1a; 1、多平台支持&#xff1a;3DTILES格式基于WebGL和JavaScript技术&#xff0c;可以在多个平台上…

用Python搞定接口自动化测试:轻松实现RPC协议接口测试

每天进步一点点&#xff0c;关注我哦&#xff0c;每天分享测试技术文章&#xff0c;文末有福利&#xff01; 目录&#xff1a;导读 前言 一、什么是RPC 二、RPC框架 三、基于grpc框架服务的接口测试 01创建一个grpc服务接口 02调用grpc接口客户端 03接口框架中适配grpc封…

nvm安装使用详解,附gnvm介绍

最近工作中&#xff0c;再次遇到了需要处理 Node.js 多版本管理的事情&#xff0c;由于在windows系统下开发&#xff0c;于是使用了 nvm 来做版本管理。 其实&#xff0c;之前在写文章介绍 进行node和npm的版本升级 的时候&#xff0c;也有提到 node 多版本管理工具&#xff0c…

史上最全Maven教程(五)

文章目录 &#x1f525;Maven聚合案例_搭建dao模块&#x1f525;Maven聚合案例_搭建service模块&#x1f525;Maven聚合案例_搭建web模块&#x1f525;Maven聚合案例_运行项目&#x1f525;依赖传递失效及解决方案 &#x1f525;Maven聚合案例_搭建dao模块 dao子工程中一般写实…

linux交叉编译环境搭建 gcc + openocd + stlink + cubeMX + cortex Debug

文章目录 运行环境&#xff1a;1.1 gcc1)下载并解压gcc2)环境配置 2.1 openocd1)下载并解压openocd2)环境配置&#xff08;没有权限就加sudo&#xff09; 3.1 stlink1)下载并双击安装stlink 4.1 cubeMX1)下载并解压cubeMX2)生成makefile工程 5.1 cortex Debug1)setting设置2)la…

国家信息安全水平考试中NISP二级网络安全证书介绍

国家信息安全水平考试中NISP二级网络安全证书介绍 1、什么是NISP? 国家信息安全水平考试&#xff08;National Information Security Test Program&#xff0c;简称NISP&#xff09;&#xff0c;是由中国信息安全测评中心实施培养国家网络空间安全人才的项目。 2、考取NISP…

电信运营商网络运维方案

随着新一代信息技术加快普及应用&#xff0c;5G、云和人工智能正加速智能社会的到来&#xff0c;三大技术正在重构网络。随着我国5G产业快速推进&#xff0c;中国移动、中国联通、中国电信加快步伐&#xff0c;全业务运营时代已经到来。全业务运营时代的特点是&#xff1a;网络…

ros2 foxy创建一个包和节点-ubuntu20.04

文章目录 创建工作区目录创建包和节点colcon build编译CMakeLists.txt文件find_packageadd_executable package.xml面相过程的方式生命一个节点以面向对象的方式创建一个节点 创建工作区目录 mkdir -p ~/ros2_ws/src cd ~/ros2_ws我们创建了两个目录&#xff0c;ros2_ws和在他…

echarts实用经验:tooltip悬浮框添加button按钮;toolbox添加自定义按钮;显示隐藏切换导致图表太小渲染不及时的解决办法

一、tooltip悬浮框添加点击事件 这里我配置的是在柱状图中&#xff0c;echarts配置项文档 注意&#xff1a; 1、tooltip&#xff0c;默认是鼠标移动时触发&#xff08;‘mousemove’&#xff09;。这种情况下&#xff0c;是无法点击到悬浮框的&#xff0c;更别说点击框内的按钮…

从0到1:拍卖小程序开发的实践经验分享

在当今智能手机普及的时代&#xff0c;拍卖小程序开发正成为越来越多企业的选择。本文将分享在开发拍卖小程序过程中的实践经验。 拍卖小程序开发的重要性 随着移动互联网的发展&#xff0c;拍卖小程序的需求越来越大。开发一个拍卖小程序可以带来多种好处&#xff0c;包括提…

openQA----openQA的架构

【原文链接】openQA----openQA的架构 openQA简介 openQA是一款用于完整的操作系统安装测试的测试工具&#xff0c;它通过创建虚拟机的方式执行测试过程并在每一个测试步骤中检查控制台回显和屏幕结果&#xff0c;并可以通过按键或者命令进入下一个步骤。openQA可以检查操作系…

Windows Java JavaFX IntelliJ IDEA 开发环境搭建 创建工程 编译运行 打包分发 自定义运行时

博文目录 文章目录 本文说明JavaFX 简单说明JavaFX 版本说明JavaFX 与 JDK 的关系JavaFX 与 JDK Modular (JDK 9 模块化系统)JavaFX 模块说明 (JavaFX 20)JavaFX Scene Builder创建 JavaFX 应用程序的两种选择 环境搭建版本选择IntelliJ Idea 安装配置Modular JavaFX Project …

图像质量评价指标FID、LPIPS、NIQE及其代码

文章目录 FIDLPIPSNIQE FID FID的全称是Frchet Inception Distance&#xff0c;用于衡量两个多元正态分布的距离&#xff0c;数值越小越好。具体的&#xff0c;FID使用Inception Net-V3全连接前的2048维向量作为图片的特征向量&#xff0c;再计算两张图像特征之间的距离。 F I…

医疗行业数据库老牌厂商 InterSystems 的新实践

作者 | 宋慧 出品 | CSDN 云计算 数据赛道火爆&#xff0c;呈现了爆发式增长&#xff0c;CSDN 的《新程序员》杂志曾做过主题为“新数据库时代”的系列专题报道&#xff0c;而且从 Gartner2022 年魔力象限也能看到&#xff0c;仍然有众多厂商汇集在云数据库这个领域的象限中。…