图解,C语言希尔排序

希尔排序和插入排序很相似,有点像插入排序的升级版本。

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一

希尔排序也是一种插入排序算法,只不过在插入排序上突破了结界,达到了另一种顶峰的存在,这种顶峰使得时间复杂度变成「O(nLogn)~O(n^2)」。

假设我们需要给下面的数据进行排序

结合之前的文章,我们知道两个数据的插入排序就是比较两个数据的大小,然后进行排列。

希尔排序是通过分组+插入

首先我们排序的数量是 8 个,我们需要把数据分成 8/2 = 4组。

如下图

对上面4组的数据进行插入排序后得到

然后再继续分组 8➗2➗2 = 2 分成 2组

这两组数据再进行插入排序

如下图

这样之后,整个数据的排序差不多完成

我们在这个基础上再对整个队列执行一次插入排序,就会完成了整个队列的排序,因为之前已经对数据进行过排序,再进行插入排序的时候,效率会明显得到提升。

整个过程可以观看动态图片

代码实现看看

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int shell_sort(int arr[],int n)
{register int i, j, tmp;int step;for(step = n/2; step > 0;step /= 2)/*增量步长*/{/*step = 4 2 1*/for(i = step; i < n; i++){tmp = arr[i];j = i - step;for(;j >= 0 && tmp < arr[j];){arr[j + step] = arr[j];j -= step;}arr[j + step] = tmp;}}
}#define LENGTH 8int main( int argc, int *argv[])
{int i;int arr[LENGTH] = {6,5,3,1,8,7,2,4};for(i=0;i<LENGTH;i++)printf("%d ",arr[i]);printf("\n");shell_sort(arr,LENGTH);for(i = 0;i < LENGTH;i++)printf("%d ", arr[i]);printf("\n");
}

代码输出

6 5 3 1 8 7 2 4 
1 2 3 4 5 6 7 8 

代码图片解析

步长等于4的时候,先进行第一次插入排序

 

步长等于2的时候,先进行第二次插入排序

步长等于1的时候,先进行第三次插入排序

具体过程可以查看插入排序的文章

最后一次进行插入排序之后,就会得到排序完成后的数列


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

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

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

相关文章

TQ210——S5PV210串口通信

TQ210——S5PV210串口通信 1、 串行与并行通信 串行通道中&#xff0c;有效信息被编码后串行的从单根传输线上传送出去。譬如发送ASCII字符’a’&#xff0c;我们可以将’a’对应的ASCII码97&#xff08;0x61&#xff09;分作8个bit在传输线上顺序依次传输。 与串行传输相对应…

暴力字符匹配算法的C语言实现

1、聊一聊今天跟大家分享的这个曲子一般是在天气预报和英语试听中出现&#xff0c;不信你听一听绝对有种似曾相识感觉。本篇文章主要是为讲解高效字符匹配算法的一则预告文&#xff0c;跟大家讲讲暴力字符匹配算法以及匹配算法在通信中如何使用。2、暴力匹配算法介绍1聊聊字符匹…

TQ210 —— LCD

TQ210 —— LCD一、LCD控制器1、S5PV210 LCD控制器要使一块LCD正常的显示文字或图像&#xff0c;不仅需要LCD驱动器&#xff0c;而且还需要相应的LCD控制器。在通常情况下&#xff0c;生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起&#xff0c;而LCD控制器则是…

微信表情都戒烟了

昨天看到最新的微信表情是这样的原来的抽烟表情被替换成了这释放出一个信号&#xff0c;就是「抽烟不酷了」不过我想说&#xff0c;只戴着一个绿帽子&#xff0c;嘴巴里面什么都没有&#xff0c;好像也不酷啊。难道重点就是那个墨镜????&#xff1f;不过&#xff0c;在PC版…

Python 类的属性和实例属性 Python 的动态语言

#定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa 10... #对类 Aa实例化出一个实例 a1>>> a1 Aa() >>> print(a1.__dict__)#查看实例并没有自己的方法和属性{}>>> a1.aaa #但是这个实例在调用属性的时候, 发现自己没有这个属性, 于…

高效KMP字符匹配算法就这么简单

1、聊一聊上一篇文章"暴力"字符匹配算法的C语言实现2、KMP算法介绍1KMP介绍KMP是一种字符匹配算法&#xff0c;为啥叫KMP呢&#xff1f;因为是由D.E.Knuth&#xff0c;J.H.Morris和V.R.Pratt大佬提出来的。那一些小伙伴会问了怎么不叫"DJV算法"呢?因为老外…

TQ210 —— NandFlash

TQ210 —— nandflashTQ210 开发板板载一片 1Gbyte 的 NAND FLASH——K9K8G08U0B&#xff0c;通过查询K9K8G08U0B 芯片手册可以得到如下信息&#xff1a;&#xff08;理论知识不再介绍&#xff09;K9K8G08U0B : (1G 32M) x 8bit 总大小Data Register : (2K 64) x 8bit 数据寄…

涂鸦赞助的500个开发套件,先到先得

来源 | 涂鸦跟涂鸦申请的福利&#xff0c;给喜欢开发的同学发放开发套件&#xff0c;只要是不是专门白嫖党&#xff0c;数量可以不做限制。去年疫情突发&#xff0c;封城、封小区以及人员隔离&#xff0c;让原本享受千般宠爱的主子们变成了靠吃猫砂、塑料袋度日的小可怜&#x…

Linux-C 编程 / 网络 / 超迷你的 web server

一、为生活寻找固定的支撑点1. 什么是生活的支撑点&#xff1f;让自己感到些许痛苦&#xff0c;但却会带来实实在在的充实感和成就感的事情。举个栗子&#xff0c;我的支点是运动、看书、研究技术。2. 固定的支撑点很重要&#xff1a;三个固定的要素&#xff1a;时间 / 空间 / …

20165326 java第四周学习笔记

第四周学习笔记 ch5 子类和父类子类只能有一个父类使用关键字extendsyclass 子类 extends 父类系统默认的祖先类Object&#xff08;java.lang包中&#xff09;继承&#xff1a;子类继承父类的方法可以直接作为实例方法调用&#xff0c;继承的成员变量和方法的访问权限不变&…

用VSTS进行网站压力测试

VSTS提供了一个丰富、强大的工具平台&#xff0c;融合了软件开发领域的各个角色&#xff0c;涵盖软件开发生命周期的各个阶段&#xff0c;包括设计&#xff0c;开发&#xff0c;测试&#xff0c;管理&#xff0c;而这一整套构件的融会贯通&#xff0c;让它可以有效地改善软件开…

第四周选做作业

相关知识点的总结 通过命令行引入参数递归循环课上内容的补做&#xff0c;结果截图 未完成内容:递归与循环 补做教材第二章&#xff0c;第三章编程题目 参考资料 2016-2017-2 《Java 程序设计》课堂实践项目编写一个Java应用程序,输出全部的希腊字母。_百度知道[]转载于:https:…

数据结构和算法,也就那么回事儿

金三银四来了&#xff0c;各大厂动静不小&#xff0c;都在储备人才&#xff0c;绝对是程序员面试的黄金时间了&#xff0c;不少同学也在后台反馈面试中遇到的一些问题&#xff0c;所以今天想跟大家说说算法。说起算法&#xff0c;那大厂面试是绝对必考的&#xff0c;可以说是一…

SecureCRT护眼设置

SecureCRT护眼设置Option —— Global Options —— Terminal —— Appearance —— ANSI COlor从左至右&#xff0c;从上至下值分别为&#xff08;RGB元组&#xff09;&#xff1a; 1&#xff1a;(0,43,53) (128,128,0) (0,160,0) (160,160,0) (255,128,128) (…

北美暴风雨,Linux5.12被延迟6天发布

上个月中旬&#xff0c;因为罕见的严寒天气和暴风雪&#xff0c;美国得州和俄勒冈州波特兰遭遇了持续多天的停电。Linux 创始人 Linus Torvalds 就生活在波特兰&#xff0c;多年来他一直在家中远程工作&#xff0c;并负责新内核的最终发布。之前我们报道过&#xff0c;内核社区…

C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)

可空值类型 C#2推出可空类型来表示可以为null的值类型。这是一个呼声很高的需求&#xff0c;因为在常用的数据库中都是允许某些值类型可为空的。那么为什么值类型就不能为空呢&#xff1f;内存中用一个全0的值来表示null&#xff0c;但是全0的地址说明了这个内存空间是被清除了…

ISA之三种客户端访问

我们已经懂得怎么搭建ISA2006.我们今天来利用ISA访问外网&#xff01;顺便说声如果你IP&#xff0c;网关&#xff0c;DNS什么都没问题。那么你可以看看你的NAT处理&#xff01;下面我们看看我们的试验拓扑&#xff01;我们在ISA的服务器上做访问规则&#xff01;来允许我们可以…

面试官不讲武德,居然让我讲讲蠕虫和金丝雀!

1. 蠕虫病毒简介2. 缓冲区溢出3. 缓冲区溢出举例4. 缓冲区溢出的危害5. 内存在计算机中的排布方式6. 计算机中越界访问的后果7. 避免缓冲区溢出的三种方法7.1 栈随机化7.2 检测栈是否被破坏7.3 限制可执行代码区域8. 总结蠕虫病毒是一种常见的利用Unix系统中的缺点来进行攻击的…

asp.net core 拦击器制作的权限管理系统DEMO

效果图 没有登陆不会执行请求日期的方法&#xff0c;不管是否登陆都不允许访问请求时间方法 验证不通过是会进行转发到Home/error方法中&#xff0c; 代码附上&#xff1a; [Route("[controller]/[action]")]public class HomeController : BaseController{/// <s…

工程师姓什么很重要!别再叫我“X工”!!!

工程师之间都是这么互相打招呼的——“高工&#xff0c;你设计图通过了么&#xff1f;”“李工&#xff0c;工程画完了吗&#xff1f;”“王工&#xff0c;你真是越来越漂亮了&#xff01;”"张工&#xff0c;你的DFM整完了吗"“周公&#xff0c;Schedule 该更新了”…