八大排序之希尔排序

一、概念及其介绍

希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。

希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。

它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。

二、适用说明

希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 ) 复杂度的算法快得多。

三、实现

 每趟将数组分成n/gap个小组,每个元素间隔gap,在各个小组内实现插入排序

1fdc273a6b094f9dadb1d0ad0ed3efd7.jpeg

//希尔排序
void ShllSort(int* a, int n)
{int i;int gap=3;int j;//gap组依次排序for(j=0;j<gap;j++){ 	//单趟for (i = 0; i < n; i += gap){int end = i;int tem = a[end + 1];//[0,end]有序, end+1位置的值插入while (end >= 0){if (a[end] > tem){a[end + gap] = a[end];a[end] = tem;end -= gap;}else{break;}}}}
}

循环不断缩小gap,gap越小时越接近有序

完整代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>void print__f(int* a,int n)
{int i;for (i = 0; i < n; i++){printf(" %d", a[i]);}}//希尔排序
void ShllSort(int* a, int n)
{int gap = n;while (gap > 1){gap /= 2;int j;//gap组依次排序for (j = 0; j < gap; j++){ 		int i;//单趟for (i = 0; i < n-gap; i += gap){int end = i;int tem = a[end + gap];//[0,end]有序, end+1位置的值插入while (end >= 0){if (a[end] > tem){a[end + gap] = a[end];a[end] = tem;end -= gap;}else{break;}}}}}}
int main()
{int a[] = { 12,28,20,50,48,1,5,28 };int n = sizeof(a) / sizeof(a[0]);print__f(a,n);printf("\n");//InsertSort(a);ShllSort( a,n);print__f(a,n);return 0;
}

 4f3484d3e0534ab1b34fa16ee5ba972a.png

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

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

相关文章

什么是微分和导数?

文章目录 设立问题微分特性指数特性线性特性常数特性 多项式微分导数 在机器学习领域&#xff0c;有多种解决最优化问题的方法&#xff0c;其中之一就是使用微分。 通过微分&#xff0c;可以得知函数在某个点的斜率&#xff0c;也可以了解函数在瞬间的变化。 设立问题 请想象一…

HTML 教程

HTML 教程 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。它描述了一个网站的结构骨架,使得浏览器能够展示具有特定格式的文本、链接、图片和其他内容。本教程将带你深入了解HTML的基础知识,包括其语法、常用标签以及如何构建一个基本的网页结构。 …

Tortoise 删除文件

1、右击需要删除的文件&#xff0c;选择Delete 2、提交

【查看显卡信息】——Ubuntu和windows

1、VMware虚拟机 VMware虚拟机上不能使用CUDA/CUDNN&#xff0c;也安装不了显卡驱动 查看显卡信息&#xff1a; lspci | grep -i vga 不会显示显卡信息&#xff0c;只会输出VMware SVGA II Adapter&#xff0c;表示这是一个虚拟机&#xff0c;无法安装和使用显卡驱动 使用上…

GitHub 标星 6

美国网友对这个大全给予了很高的评价&#xff1a;这份清单中列出的开源软件&#xff0c;不仅解决了硅谷大厂前员工的难处&#xff0c;也能为其他所有码农解除困惑。 在这套大全的指导下&#xff0c;任何一个工程师&#xff0c;都能获得类似在谷歌内部写代码的体验。xg2xg 上线…

fot循环语句

概念&#xff1a; 循环是一种重复执行一段代码的结构&#xff0c;只要满足循环的条件&#xff0c;会一种执行这个代码。 循环条件&#xff1a;在一定范围内&#xff0c;按照指定的次数来执行循环 循环体&#xff1a;在指定的次数内&#xff0c;执行的命令序列。只要条件满足…

骑马与砍杀-战团mod制作-基础篇-武器模型入骑砍(二)

骑马与砍杀战团mod制作-基础-武器模型入骑砍笔记&#xff08;二&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sour…

模型计算量估计,训练时间预测 Scaling Laws for Neural Language Models

一、模型计算量 C ≈ 6N*D 其中C表示训练语言模型所需的总计算量&#xff0c;N表示模型参数量&#xff0c;D表示用于训练的语料总量&#xff0c;6表示每训练一个token所需的浮点计算量约为6N&#xff0c;其中前向计算2N&#xff0c;反向计算4N。 注意&#xff1a;这里的6是针…

前端小白指南:前端生成唯一设备标识的那些事儿

最近&#xff0c;我在使用javascript开发一个基于Chrome的插件&#xff0c;遇到了一个有意思的需求。插件需要生成一个授权码&#xff08;code&#xff09;&#xff0c;但为了确保安全性&#xff0c;这个code必须与设备绑定&#xff0c;防止被不同的设备使用&#xff0c;限制一…

Python vs MATLAB: 易于学习和代码可理解性的对比

Python vs MATLAB Python vs MATLAB: 易于学习和代码可理解性**Python的易用性与代码理解****MATLAB的易用性与代码理解****哪个更易上手&#xff1f;****结论** Python vs MATLAB: 易于学习和代码可理解性 在科学计算、工程模拟和数据分析领域&#xff0c;Python和MATLAB是两…

使用 C++11 Lambda 表达式在 Qt 中连接信号与槽

在 Qt 使用 C11 引入的 lambda 表达式来简化信号与槽的连接已经成为一种不错的选择。本文将通过一个简单的例子来展示如何使用 lambda 表达式来连接 QAction 的信号与槽。 传统的连接方式 首先&#xff0c;看看传统的连接方式&#xff1a; QAction* action foo->addActi…

腾讯视频通话接口

简要描述 获取登录IM账号及签名请求URL /videocall/getImUserInfo?account=1234&appName=tv请求方式 GET参数 参数名必选类型说明account是string通话双方统一账号appName是string应用名称,区分不同类型应用如:TV,MINI返回示例 {"code": 200,"status"…

kafka 管理节点 Controller 角色分析

kafka 管理节点 Controller 角色分析 kafka controller 如何管理分区的创建、状态监测、故障切换、内容复制、如何管控分区副本的状态检测故障切换、数据同步、learder 选举?Kafka Controller 是 Kafka 集群中的一个关键组件,负责管理分区的创建、状态监测、故障切换、内容 …

document.write()方法总结

document.write()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;document.write()方法是JavaScript中用于向HTML文档写入内容的方法之一。它允许我们在…

【团队成长】2024-25周周报-业务介绍内容创作

大家好&#xff01;我们是IndustryOR 团队&#xff0c;致力于分享业界落地的算法技术。欢迎关注微信公众号/知乎/CSDN【运筹匠心】 。 记录人&#xff1a;张哲铭&#xff0c;某互联网大厂算法专家 【团队成长/个人成长】系列的推文会以 【工作周报】 的方式记录IndustryOR团队及…

【SpringCloud-Seata源码分析2】

文章目录 分支事务注册-客户端分支事务服务端的执行 分支事务注册-客户端 第一篇我们将全局事务启动&#xff0c;以及开启源码分析完成了&#xff0c;现在我们需要看一下分支事务注册。 我们分支事务的开始需要从PreparedStatementProxy#executeUpdate中去看。 public class…

智能物流系统堪比帝王宠信妃子,我给你类比说明一下……

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 让我们将智能物流系统种涉及出库入库作业完整链条的“货到人”拣选系统的工作流程与古代帝王宠信翻牌妃子的过程进行一个有趣的类比&…

【vue3|第13期】深入了解Vue3生命周期:管理组件的诞生、成长与消亡

日期&#xff1a;2024年6月22日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

神经科学原理精解【1】

文章目录 神经系统组成神经系统两类细胞脑组织基本结构参考资料 神经系统组成 神经系统由中驱神经系统和外围神经系统组成。中驱神经系统包括脑和脊髓。脑的主要功能是大脑、小脑和脑干。外围神经系统由位于脑和脊髓之外的神经和神经细胞组成。 神经系统两类细胞 神经元 感知…

基于深度学习的边缘检测

基于深度学习的边缘检测 边缘检测是计算机视觉中的一项基本任务&#xff0c;旨在识别图像中像素值变化显著的区域&#xff0c;即边缘。传统的边缘检测算法&#xff08;如Sobel、Canny等&#xff09;通过滤波器和梯度运算来检测边缘&#xff0c;而基于深度学习的方法则通过训练…