十大排序之希尔排序

希尔排序

希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序

希尔排序是非稳定排序算法。
希尔排序因DL.Shell于1959年提出而得名。

希尔排序是将待排序的数组元素按下标的一定增量分组 ,分成多个子序列,然后对各个子序列进行直接插入排序算法排序;然后依次缩减增量再进行排序,直到增量为1时,进行最后一次直接插入排序,排序结束。

1. 算法步骤

  1. 确定增量分组次数
  2. 每一次增量中遍历一个分组中所有的元素
  3. 不同分组之间的元素进行插入排序

c o u n t = ⌊ l e n / 2 ⌋ count = \lfloor len/2 \rfloor count=len/2

count : 增量分组次数(分多少次组) len:数组长度

2. 动图演示

img

3.代码实现

void swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}
void shell_sort(int arr[], int len)//默认是对int类型的数组进行数据交换
{for (int i = len; i != 1; i = i/2)//增量分组次数为len/2再向下取整{								//i变量循环的次数就是增量分组次数for (int j = 0; j < i/2; j++)//遍历分组中的每个元素{for (int k = j+i/2; k < len; k=k+i/2)//思想是插入排序{int temp = k;//第一个待交换元素的下标while (1){if (arr[temp] < arr[temp-i/2])//该分组元素小于前一个分{							//组,进行交换if (temp < (i / 2))//如果是第一分组,退出死循环{break;}swap(arr + temp, arr + temp - i / 2);//交换temp = temp - i / 2;//指向前一个序列中相应位置}else{break;}}}}}
}
void main()
{int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70,32};//定义一个待排序的数组int len = sizeof(arr) / sizeof(*arr);printf("\nsort before\n");for (int i = 0; i < len; i++){printf("%d\t", arr[i]);}shell_sort(arr,len);printf("\shell_sort after\n");for (int i = 0; i < len; i++){printf("%d\t", arr[i]);}system("pause");
}

4.实验结果

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

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

相关文章

NBA球员出手位置分布图

小白一只&#xff0c;想转行互联网行业的数据分析&#xff0c;通过寒假的佛系学习对python有了一定的了解。记录一下第一个小玩意儿。 在刷crossin论坛的时候突然看到一篇关于NBA的数据分析&#xff0c;因为本身自己也非常喜欢打球&#xff0c;顿时就有了兴趣。 由于对python…

【八大排序(二)】希尔排序(谁说天才都短命?)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; Shell排序 1. 前言&#x1f6a9;2. 希尔排…

网络安全工程师需要考什么证吗?

目前网络安全行业&#xff0c;国内都有哪些证书可以考。 一、CISP-PTE &#xff08;国家注册渗透测试工程师&#xff09; CISP-PTE即注册信息安全渗透测试工程师&#xff0c;该证书由中国信息安全测评中心颁发&#xff0c;证书是国内唯一认可的渗透测试认证&#xff0c;专业性…

网络安全有哪些岗位?如何成为一名优秀的网络安全工程师?

网络安全是什么&#xff1f; 首先说一下什么是网络安全&#xff1f;其中&#xff0c;网络安全工程师工作内容具体有哪些&#xff1f; 网络安全 确保网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而受到破坏、更改、泄露&#xff0c;系统…

为什么说,网络安全工程师是网安行业的天花板?

为什么说&#xff0c;网络安全工程师是网安行业的天花板&#xff1f; 最近看到网上有很多人在问诸如&#xff1a;“怎样成为网络信息安全工程师”等相关问题&#xff0c;甚至还有人说“网络安全工程师已经成为这个行业的天花板”&#xff0c;这可能与近几年网络安全事件频发&a…

网络安全工程师必备的七大技能

网络安全有多重要 网络安全非常重要&#xff0c;因为在现代社会中&#xff0c;人们日常生活中的很多方面都与网络有关。随着互联网和数字技术的不断发展&#xff0c;人们已经变得越来越依赖网络&#xff0c;网络已经成为了商业、金融、通信、交通、能源、医疗、教育等各个领域…

软考网络工程师

网络工程师备考经验 2022年上半年网络工程师的考试已经接近尾声&#xff0c;成绩也在7月23号出来了&#xff0c;本人运气很好&#xff0c;在这次考试中取到了满意的成绩&#xff0c;下面是查询结果。 配套资料&#xff1a; 链接: https://pan.baidu.com/s/1b486ZUOYpjsNN-9oK…

网络安全工程师是做什么的?

顾名思义&#xff0c;网络安全工程师主要是维护网络的安全和稳定&#xff0c;对网页篡改、计算机病毒、系统非法入侵、数据泄密、网站欺骗、服务瘫痪、漏洞非法利用等信息安全事件进行维护。从社会角度来看&#xff0c;网络安全工程师在维护个人信息安全和解开黑客攻击上发挥着…

网络安全有哪些岗位,如何成为一位优秀的网络安全工程师?

网络安全是什么&#xff1f; 首先说一下什么是网络安全&#xff1f; 网络安全工程师工作内容具体有哪些&#xff1f; 网络安全是确保网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而受到破坏、更改、泄露&#xff0c;系统连续可靠正常地…

网络安全工程师和网络工程师一样吗(网络安全工程师与网络工程师)

前言 今天给各位分享网络安全工程师和网络工程师一样吗的知识&#xff0c;其中也会对网络安全工程师与网络工程师进行解释&#xff0c;如果能碰巧解决你现在面临的问题&#xff0c;别忘了关注本站&#xff0c;现在开始吧&#xff01;本文目录一览&#xff1a; 1、网络工程师、网…

如何成为一名合格的网络安全工程师?需要掌握那些能力?

近期网络的迅速发展&#xff0c;网络安全成为了一个备受关注的话题。随之而来的是网络安全工程师这个职业的兴起。成为一名合格的网络安全工程师需要具备哪些能力呢&#xff1f;下面我们来一一探讨。 首先 网络安全技术方面是网络安全工程师必须掌握的能力之一。网络安全技术…

网络安全工程师考证指南

已经到2023年了&#xff0c;那么信息安全类证书最有前途的有哪些呢&#xff1f;今天和大家一起聊聊这个话题&#xff01; 1.CISP(国家登记的信息安全专业人员) 就CISP而言&#xff0c;安全实践者基本耳闻&#xff0c;算是国内权威认证&#xff0c;毕竟有政府背景为认证做背书…

网络安全工程师需要具备的5个重要技能

网络安全工程师需要具备的5个重要技能 大数据时代&#xff0c;网络安全非常重要&#xff0c;越来越多的企业也越来越重视网络安全&#xff0c;而网络安全工程师也成为现在需求量比较大的职业&#xff0c;成都也有很多专门做网络安全培训的学校&#xff0c;为这个行业的发展输送…

【网络工程师】<软考中级>网络安全与应用

目录 一、网络安全应用&#xff1a; 1.网络安全威胁和漏洞类型&#xff1a; 2.网络安全信息数据的五大特征&#xff1a; 3.网络安全基本技术&#xff1a; 二、信息加密技术&#xff1a; 1.现代信息加密技术&#xff1a; 2.现代信息加密技术对称密钥总结表&#xff1a; …

网络安全工程师做什么?

​ 网络安全很复杂。数字化转型、远程工作和不断变化的威胁形势需要不同的工具和不同的技能组合。 系统必须到位以保护端点、身份和无边界网络边界。负责处理这种复杂安全基础设施的工作角色是网络安全工程师。 简而言之&#xff0c;网络安全工程师是负责设计和实施组织安全系…

怎么用AI自动写作文?试试这几款软件

我在工作的过程中经常需要频繁地写一些奇怪的文章&#xff0c;比如描述某种产品的使用方法、写一篇关于某种话题的分析报告。由于这些文章内容相对单一&#xff0c;且工作量大&#xff0c;我在撰写的不仅费时费力&#xff0c;甚至还有点力不从心。于是&#xff0c;我便想到可以…

PCL-点云处理(一)

PCL—点云处理&#xff08;一&#xff09; PCL—综述—三维图像处理 点云模型与三维信息点云库对滤波算法的实现PCL—点云分割&#xff08;RanSaC&#xff09;-低 点云分割RanSaC算法PCL中基于RanSaC的点云分割方法PCL—点云分割&#xff08;邻近信息&#xff09;-低 1.确定领域…

知识图谱基础知识(一): 概念和构建

推荐&#xff1a; 知识图谱构建技术一览 知识图谱基础知识之三——知识图谱的构建过程 目录 一、什么是知识图谱 二、知识图谱的分层架构 三、知识图谱构架技术 &#xff08;一&#xff09;数据获取&#xff08;Data Acquisition&#xff09; &#xff08;二&#xff0…

脑机接口实例一:脑电信号分类

文章目录 前言一、eeglab插件-脑电信号的可视化显示二、信号输入1.信号处理2.eeglab可视化显示 三、特征提取总结 前言 基于PCA&#xff0c;ICA&#xff0c;CSP等相关算法&#xff0c;以及FIR、IIR等相关滤波的学习&#xff0c;开始下一阶段&#xff0c;脑机接口的实战化训练与…

C语言每日一题(四)

C语言作为嵌入式Linux开发的必备工具&#xff0c;作为嵌入式Linux开发的基础语言&#xff0c;那么在面试嵌入式工程师时C语言定是面试中的重中之重 。作为一名大三的老学长&#xff0c;不得不为找工作做必要准备。每天做一道C语言面试题&#xff0c;为面试打基础。 本来还想着…