排序 - 希尔排序

排序算法——希尔排序 目录 🛴基本介绍 算法思想 🛹实例 思路分析 代码实现 🛵算法性能分析 🛴基本介绍 希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为见效增量排序。 希尔排序的时间复杂度比直接插入排序的时间复杂度小,他与直接插入排序的不同在于它会优先比较距离较远的元素。 算法思想 希尔排序是按照一定的增量进行分组排序,对每组使用直接插入排序算法排序;随着分组个数的减少,每组中元素就会越来越多,当增量减少为1时,排序结束。 🛹实例 原始数组:[8,9,1,7.. 阅读详情

希尔排序(Shellsort)的名字源于其发明者Donald Shell, 被认为是冲破2次时间界限的第一批算法,但最坏情况时间复杂度为O(n2)。它通过比较相距一定间隔的元素来进行工作;各躺比较的距离逐渐减小,直到相邻元素比较(此时变成了插入排序)。

希尔排序使用增量序列h1、h2、h3…h(t)。只要h1 = 1任何增量序列是可行的,不过有些增量序列比另外一些更好。在使用增量hk的一趟排序后,对于每一个i我们有A[i] <= A[i + h(k)],所以相隔hk的元素都被排序。此时称序列是hk-排序的。

增量序列一种流行(但不好)的做法是使用shell推荐的序列:h(t) = [N / 2] 和 h(k) = [h(k + 1) / 2]

算法实现如下,对比插入排序算法可以更好认识希尔排序。

void shell_sort(int array[], int n)
 {
     int increase, i, j, tmp;
     /*使用shell推荐的增量序列*/
     for (increase = n / 2; increase > 0; 
     increase /= 2) {
         /*i = 1时就变成了插入排序*/
         for (i = increase; i < n; i++) {
             tmp = array[i];
             for (j = i; j > 0 && array[j - increase] >= tmp; j -= increase)
                 array[j] = array[j - increase];

             array[j] = tmp;
         }   
     }   
 }

 int main()
 {
     int array[] = {5, 4, 3, 2, 1}; 
     int n = sizeof(array) / sizeof(int);
     shell_sort(array, n); 
     return 0;
 }

Hibbard增量序列1、3、5、7,……,奇数序列,能使希尔排序获得更好的时间效率,使用Hibbard增量的希尔排序的最坏情形运行时间为O(n3/2)。

DCA决策曲线的解读和代码实现 0.决策曲线 决策曲线分析法(Decision Curve Analysis,DCA)是个与ROC曲线相提并论的相对比较新的模型评价方法。 关于它的原理,长篇大论的医学统计学知识解读实在不是我的强项,放上两个链接偷偷懒: https://www.plob.org/article/12455.html https://www.iikx.com/news/statistics/1622.html 如果想看文章,这篇里的fig7就是:https://www.ncbi.nlm.nih.gov/pmc/artic 阅读详情

相关推荐

centos7安装db2 version11.1

centos7安装db2 version11.1

AKA石头 1061

希尔排序

希尔(Shell)排序的基本思想:   先取一个小于n的整数d1作为第一个增量,把文件的全部记 录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即 所有记录放在同一组中进行直接插入排序为止。该方法实质上是一种分组插入方法。 ...

qq_41910413的博客 1391

Moodle平台题库建设技术

Moodle平台题库建设技术简述1新的改变1功能快捷键1合理的创建标题,有助于目录的生成1如何改变文本的样式1插入链接与图片1如何插入一段漂亮的代码片1生成一个适合你的列表1创建一个表格1设定内容居中、居左、居右1SmartyPants1创建一个自定义列表1如何创建一个注脚注释也是必不可少的1KaTeX数学公式1新的甘特图功能,丰富你的文章1UML 图表1FLowchart流程图1导出与导入导出1...

lxf78的博客 4534

排序算法

排序算法 概述 插入排序 1 直接插入排序Straight Insertion Sort 2 希尔排序Shells Sort 选择排序 1 简单选择排序Simple Selection Sort 2 堆排序Heap Sort 交换排序 1 冒泡排序Bubble Sort 2 快速排序Quick Sort排序算法概述排序分为:内部排序和外部排序。 - 内部排序:数据记录在内存中进行排序 - 外部排

Miner_Sty的博客 7796

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 716

视觉惯性SLAM系列——ORB-SLAM3的整体介绍及各个线程的功能(五)

跟踪线程(Tracking Thread)作用:负责处理每一帧图像,进行相机位姿的估计和定位。它首先执行与前一帧图像的特征匹配,然后通过仅运动(motion-only)BA(Bundle Adjustment)优化位姿。如果跟踪失败,它会尝试在所有地图中进行重定位。此外,跟踪线程还负责决定何时插入新的关键帧,以及何时将关键帧从局部地图中移除。详细介绍见局部建图线程(Local Mapping Thread)作用:管理局部地图,向活跃地图添加关键帧和点,移除多余的关键帧和点。

曾经也曾立志 1004

排序算法之希尔排序(ShellSort)

一、简介 希尔排序又名缩小增量排序,属于插入排序,是对直接插入排序算法的一种改进。其平均时间复杂度为 O(n^1.3),最好情况下为O(n),最差为O(n2). 二、算法思想及步骤: 1.  对排序序列按一定的步长(gap)进行分组。 2. 分别对每组按直接插入排序进行排序。 3. 按一定规则缩减步长(例如可用每次步长减半的方式,即gap=gap/2)。 4. 重复2、 3 步骤直至步

姜的理想国 2432

期末求生指南:手把手教你用F12开发者工具绕过百一测评的切屏检测(JavaScript/jQuery实战)

本文详细介绍了如何利用F12开发者工具绕过百一测评的切屏检测,通过分析JavaScript/jQuery中的blur()和focus()事件监听机制,提供实战技巧动态修改代码。文章涵盖事件监听定位、代码修改方法及应对高级检测机制的策略,适合需要临时解决线上考试限制的学生参考。

weixin_30731305的博客 447

java希尔排序(含希尔排序代码)

希尔排序原理 希尔排序为啥比插入排序效率高 希尔排序的代码详解

qq_56127002的博客 5194

基于非接触式微波雷达设计的跌倒检测预警系统【短信报警】

本项目选择基于非接触式微波雷达的跌倒检测预警装置作为技术核心,采用云帆瑞达的R60AFD1跌倒检测模组。这一模组能够根据人体的运动变化,如速度、距离和姿态等特征,判断是否发生跌倒,并可以持续监控老年人是否处于危险状态。此外,本项目还结合4G通信技术,通过Air724UG模块实现短信报警功能,一旦检测到跌倒事故,系统将自动通过4G网络向紧急联系人发送短信报警,及时通知亲属或医护人员进行救援。

1751

AI大模型入门到实战系列(二十一)命名实体识别(NER)

命名实体识别(NER)是自然语言处理中的关键任务,旨在从文本中识别并分类预定义类别的实体(如人名、地点、组织等)。其核心步骤包括文本预处理、实体边界检测和类型分类。主流技术方法经历了从基于规则、统计机器学习到深度学习的演进,当前主要采用预训练语言模型(如BERT)和序列标注技术(如BiLSTM-CRF)。关键技术挑战包括实体边界模糊、嵌套实体和领域适应等问题。NER广泛应用于信息抽取、搜索引擎优化和知识图谱构建等领域,常用精确率、召回率和F1值作为评估指标。实际应用中通常采用BIO标注体系,并通过标签对齐处

echo的博客 1622

希尔排序详解

八大排序算法中,有两种插入排序,直接插入排序和希尔排序,下面我们来介绍希尔排序。 希尔排序 希尔排序又叫做缩小增量排序。 1、基本思想 设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和...

星空 4895

【WRF实操】四层嵌套网格设计-以粤港澳大湾区GBA为例

四层嵌套网格设计-以粤港澳大湾区GBA为例

WW、forever的博客 819

希尔排序增量怎么确定_排序——希尔排序

希尔排序基本原理希尔排序是插入排序的升级版请先学会插入排序将整个待排序序列分割成为若干子序列分别进行插入排序插入排序规则两个区域排序区未排序区用一个索引值来区分未排序区元素与排序区元素比较插入到合适位置直到未排序区清空图解原数组第一次确定子序列序列一:5,9,7序列二:2,4序列三:1,3序列四:6,8各子序列插入排序后得到结果序列一结果:5,7,9序列二结果:2,4序列三结果:1,3序...

weixin_39833454的博客 2342

WINCC7.3破解文件

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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

希尔排序增量怎么确定_排序算法之希尔排序

本文将介绍排序算法中的希尔排序,它是高级版的插入排序,是我们第一个介绍的有点难度的算法。1 实例讲解希尔排序,是插入排序的一个升级版本。在插入排序中,无论数据是怎么分布的,依然循规蹈矩的一步一步比较,移动,插入。在希尔排序中,采用跳跃式的方式,按照某个增量gap将数组元素分成多组序列,并使用插入排序使得各自组内有序。随后逐步缩小gap,继续按组进行插入排序,直到增量为1。这样做的目的是使得数组整体...

weixin_39955925的博客 2745

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

排序——希尔排序

希尔排序核心还是是直接插入排序,差别在于直接插入排序就是gap=1,而希尔排序是gap从n/2或者n/3+1开始不断地趋于1,最终gap=1进行一次直接插入排序就完成了。

chenbj0205的博客 1135

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

排序之希尔排序

希尔排序思想 希尔排序对要排序的数字进行分组,在组内进行排序。排序完成需要进行多次分组,每次分组的个数是前一次分组个数的一半。 图示 以 [3290615487] 该数组为例从小到大进行排序。 1. 首先将该组数字进行分组,首次分组的个数为数组长度除以2,即 10 / 2 = 5 组,下面相同颜色的为一组(即同一组内数字之间的下标的距离为组的个数)...

Coding的博客 930

Java排序之希尔排序

希尔排序 引入:前面的博客已经讲了插入排序,插入排序的思想是将一个待排序数组分成有序和无序的两部分,每次从无序部分中选择一个数插入到有序组数中合适的位置,由于每次插入的过程中都要和已经有序中的数作比较,来确定合适的插入位置,因此当插入的数较小时,那么就会和前面已经有序的数比较的次数较多,因此针对插入排序的缺点,提出了希尔排序。下面将着重讲解希尔排序的思想和原理实现过程。 希尔排序思想:希尔排序又称缩小增量排序,它的基本思想是将待排序数分成若干组,对每一组采用直接插入排序,再将排好序的若干组再分组,并且每次分

Waiting的博客 190

【排序】希尔排序

DL.Shell于1959年提出“希尔排序”,它属于插入排序,对直接插入排序算法做出了很大的改进。 如何排序? 设无序序列有N个元素,先将这N个元素分成k组,每一组的间距为d,因为N不一定能整除d,所以实际上可能会有几个元素没有被分组,不过这没有关系,因为总有一次分组会将它们放到组内,因为我让间距d每一次都自减1,当然d最小只能为1,因为它只有N个元素。:)   希尔分析:(等实践完下面的

OnePower 908
上一篇: 排序 - 快速排序
下一篇: 查找 - 二分查找
codingnote
博客等级 码龄12年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值