C语言希尔排序详解!!!速过

目录

希尔排序是什么?

关于时间复杂度

希尔排序的源代码

希尔排序源代码的详解


希尔排序是什么?

之前我们说了三个排序(插入排序,选择排序,冒泡排序)有需要的铁铁可以去看看之前的讲解。

但因为之前的排序时间复杂度都是n^2.接下来介绍的希尔排序是一个时间优于前面三种排序的算法

 由上图我们看到排序被分为了许多组(不同的颜色),这就是希尔排序的

第一步:分组小排(自己取得名)

这一阶段呢就是要将每个组进行一个排序让其每个组都是有序的,这样形成一个散乱但比之前更有序的结果,可以从图中第一轮结果看出。

但我们发现好像这也没有序啊,当然了,如果这么简单那这个时间负责度就是n了,所以就需要下一步了。

第二步:改间隔,重新排。

由于第一步的开荒,数组比刚开始有序的多但还是模糊,接下来如果我们把间隙改小,那每一个小组的数字就会增多,但又由于之前第一组的原因其实有些数据已经其实已经到了属于自己的位置,那接下来就会减少损耗(不用交换数据)。就这样到gap==1(每组的间隔),就有序了

总的希尔排序,就是先分组,在排序,每次使模糊的答案清晰一点(每一次的损耗都会减小),最终当gap == 1时,只需轻轻擦拭即可得出答案。

关于时间复杂度

因为gap的原因所以希尔排序是不稳定的。 

希尔排序的源代码

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

希尔排序源代码的详解

首先传入一个数组a,和数组个数n。

gap == n,为什么要gap > 1呢?因为当gap一直除以2,最后一组的gap 一定是2。

因为之前介绍到,到gap == 1时排完这时候数组就是有序的了。所以当 gap == 2 / 2 == 1时。最后一趟走完就可以走出循环了。

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

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

相关文章

GPU芯片逆势扩张,NVIDIA成为2023年全球芯片的唯一赢家

市调机构Gartner发布数据指出2023年全球诸多芯片行业都在下滑&#xff0c;唯一取得增长的仅有GPU/AI芯片&#xff0c;GPU芯片的市场规模增加了一倍&#xff0c;而领头羊NVIDIA无疑成为最大的赢家。 从2022年下半年以来&#xff0c;全球芯片行业就已步入供给过剩的阶段&#xff…

wayland(xdg_wm_base) + egl + opengles——dma_buf 作为纹理数据源(五)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、EGL dma_buf import 相关的数据结构和函数1. EGLImageKHR2. eglCreateImageKHR()3. glEGLImageTargetTexture2DOES()二、egl 中 import dma_buf 作为纹理的代码实例1. egl_wayland_dmabuf_…

【Node.js】path 模块进行路径处理

Node.js 执行 JS 代码时&#xff0c;代码中的路径都是以终端所在文件夹出发查找相对路径&#xff0c;而不是以我们认为的从代码本身出发&#xff0c;会遇到问题&#xff0c;所以在 Node.js 要执行的代码中&#xff0c;访问其他文件&#xff0c;建议使用绝对路径 实例&#xff1…

P15---总电磁转矩T

正弦波驱动模式工作的永磁同步电动机的总电磁转矩 T clear clc% 15页表达式 syms Omega theta E I e_A E*sind(theta) e_B E*sind(theta-120) e_C E*sind(theta-240)i_A I*sind(theta) i_B I*sind(theta-120) i_C I*sind(theta-240)P e_A*i_A e_B*i_B e_C*i_CT P/Om…

人工智能学习与实训笔记(四):神经网络之自然语言处理

目录 六、自然语言处理 6.1 词向量 (Word Embedding) 6.1.1 词向量的生成过程 6.1.2 word2vec介绍 6.1.3 word2vec&#xff1a;skip-gram算法的实现 6.2 句向量 - 情感分析 6.2.1 LSTM (Long Short-Term Memory)介绍 6.2.2 基于飞桨实现的情感分析模型 6.3 BERT 六、自…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十一)(1)(2)(3)

目录 实验十一&#xff1a;非线性方程&#xff08;组&#xff09;求解 练习一 练习二 练习三 实验十一&#xff1a;非线性方程&#xff08;组&#xff09;求解 练习一 1.求莱昂纳多方程 的解 clc;clear; p[1,2,10,-20]; roots(p)ans -1.6844 3.4313i -1.6844 - 3.4313i…

SG5032EEN晶体振荡器SPXO

5G将使通信流量呈指数级增长&#xff0c;5G通信网络需要高速和宽带&#xff0c;同时将噪声水平保持在最低水平&#xff0c;这可以通过通信设备的高频低抖动参考时钟来实现&#xff0c;使用上述晶体振荡器SPXO&#xff0c;客户可以输入一个具有极低相位抖动和功率的高频参考时钟…

docker (五)-docker存储-数据持久化

将数据存储在容器中&#xff0c;一旦容器被删除&#xff0c;数据也会被删除。同时也会使容器变得越来越大&#xff0c;不方便恢复和迁移。 将数据存储到容器之外&#xff0c;这样删除容器也不会丢失数据。一旦容器故障&#xff0c;我们可以重新创建一个容器&#xff0c;将数据挂…

c++ 可调用对象的绑定器和包装器

文章目录 可调用对象普通函数类的静态成员函数仿函数lambda函数类的非静态成员函数 最重要的可被转换为函数指针的类对象 包装器 function适配器bind可变函数和参数实现回调函数实现替代虚函数 可调用对象 在C中&#xff0c;可以像函数一样调用的有: 普通函数、类的静态成员函…

集群聊天项目

不懂的一些东西 (const TcpConnectionPtr&&#xff09;作为形参啥意思&#xff1a;接收一个常量引用&#xff0c;函数内部不允许修改该指针所指向的对象。 优势 1.网络层与业务层分离&#xff1a;通过网络层传来的id&#xff0c;设计一个map存储id以及对印的业务处理器&…

文生图提示词:天气条件

天气和气候 --天气条件 Weather Conditions 涵盖了从基本的天气类型到复杂的气象现象&#xff0c;为描述不同的天气和气候条件提供了丰富的词汇。 Sunny 晴朗 Cloudy 多云 Overcast 阴天 Partly Cloudy 局部多云 Clear 清晰 Foggy 雾 Misty 薄雾 Hazy 朦胧 Rainy 下雨 Showers …

Web前端-入门-MDN文档学习笔记

Web 入门 查看更多学习笔记&#xff1a;GitHub&#xff1a;LoveEmiliaForever MDN中文官网 安装基础软件 计算机&#xff1a;Windows、MacOS、Linux文本编辑器&#xff1a;VS Code&#xff08;推荐&#xff09;、Sublime Text、Atom、Vim等等IDE&#xff08;和文本编辑器二选…