希尔排序(详讲)

目录

个人评价

原理

希尔排序分为两步

例如

间隔大小

时间复杂度

代码


个人评价

一个很天才的想法,对插入排序进行一点更改,代码很简略但是非常的快

和堆排序可以坐在一张桌上

原理

一般的插入排序都是以1为单位进行比较

越有序,插入排序越快

希尔排序就是一个使数组不断趋近有序的排序,和插入排序有异曲同工之妙

希尔排序是一种间隔的排序

希尔排序分为两步

1.预排序

2.插入排序

例如

以3为间隔

可以分成三组

对每组都单独进行插入排序,这样就可以以很小的代价使数组趋向有序,插入排序也就越快

我们不断缩小间隔,可以使数组不断趋近有序,插排也就越快

间隔大小

插排的间隔并没有明确答案,但是一般间隔

gap=sum/3+1

gap=gap/3+1

这样做可以保证最后gap为1,而且间隔大小是随数组大小变化而变化

但是学校里上课一般gap=sum/2,gap=gap/2

时间复杂度

非常复杂,对于绝大部分人来说完全无法计算

例如

一开始间隔100,分为3组

我们假设一开始就是最差情况,那么需要排序100*(1+2)=300

但是从第二组开始

直接乱掉了

因为第二组开始就没法保证是最差情况了,因为第一组时就已经排过序了,打乱间隔也没法确保就是最差情况

对于我这计算水平来说肯定是算不出来的

但是根据大量数据可以得出

希尔排序的时间复杂度大概为

O(N^1.3)

比起冒泡,插排等等排序要快上许多,可以和复杂度为O(NlogN)的堆排序进行比较

代码

void shellsort(int* arr, int sum) {int gap=sum, begin, end, tmp,i;while (gap > 1) {gap = gap / 3 + 1;for (begin = 0; begin < gap; begin++) {for (i = begin; i < sum - gap; i += gap) {end = i;tmp = arr[i + gap];while (end >= 0) {if (arr[end] > tmp) {arr[end + gap] = arr[end];end -= gap;}elsebreak;}arr[end + gap] = tmp;}}}
}

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

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

相关文章

茅台领航,贵州白酒向前冲!

执笔 | 尼 奥 编辑 | 扬 灵 “茅台好&#xff0c;大家才好&#xff1b;大家好&#xff0c;茅台才会更好。”在2024年贵州白酒企业盛宴上&#xff0c;这股自信与豪情再度激荡&#xff0c;大家对茅台与贵州白酒产业的未来充满信心。 5月26日至27日&#xff0c;由贵州省白酒产…

一文读懂python同级目录的调用附Demo(详细解读)

目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加父目录3.2 相对路径3.3 添加init 前言 通过制作简易的Demo&#xff0c;让其更加深入的了解如何使用 1. 问题所示 发现python的同级目录相互调用会出Bug E:\software\anaconda3\envs\py3.10\python.exe F:\python_project…

internvl-chat部署

简介 InternVL1.5是一个开源的视觉模型&#xff0c;效果接近gpt-4v github地址&#xff1a;https://github.com/OpenGVLab/InternVL 体验地址&#xff1a;https://internvl.opengvlab.com/ 安装 官方推荐使用LMDeploy进行安装&#xff1a;https://lmdeploy.readthedocs.io…

Django 里如何使用 sqlite (操作步骤)

在 settings.py 里&#xff0c;已经设定好 sqlite 了 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }必须得设置好app # 在 settings.py 里INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contentt…

Paddle使用问题No module named ‘paddle.fluid’

这是Paddle版本的问题&#xff0c;从飞桨框架 2.5 版本开始&#xff0c;已经废弃了 paddle.fluid 。 ​解决方案&#xff1a;修改paddle版本 pip install paddlepaddle2.4.0

使用递归形式以及迭代形式实现树的前中后序遍历

相信大家对于二叉树的遍历并不陌生&#xff0c;对于二叉树的递归遍历我们也可以信手拈来。但是如果让我们将二叉树修改成为非递归的形式呢&#xff1f;是不是有点疑惑了&#xff1f;那么本次博客我们就来梳理一下二叉树的非递归遍历。 由于递归遍历二叉树的代码以及逻辑都很简单…

(函数)判断素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明素数判断函数&#xff1b; void prime(int number);int main() {//初始化变量值&#xff1b;int number 0;//获取用户输入的数据&#xff1b;printf(&quo…

AI在肿瘤学临床决策中的应用:一种多模态方法

在临床肿瘤学领域&#xff0c;多模态人工智能&#xff08;AI&#xff09;系统通过解读各类医学数据&#xff0c;展现出提升临床决策的潜力。然而&#xff0c;这些模型在所有医学领域中的有效性尚未确定。本文介绍了一种新型的多模态医疗AI方法&#xff0c;该方法利用大型语言模…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-03线性回归简洁版

03线性回归简洁版 主要内容 生成数据集&#xff1a;使用给定的权重和偏置&#xff0c;以及一些噪声&#xff0c;生成模拟数据。读取数据集&#xff1a;将数据打乱&#xff0c;并按批次读取数据。初始化模型参数&#xff1a;随机初始化模型的权重和偏置&#xff0c;并启用自动…

JAVA 17

文章目录 概述一 语法层面变化1_JEP 409&#xff1a;密封类2_JEP 406&#xff1a;switch模式匹配&#xff08;预览&#xff09; 二 API层面变化1_JEP 414&#xff1a;Vector API&#xff08;第二个孵化器&#xff09;2_JEP 415&#xff1a;特定于上下文的反序列化过滤器 三 其他…

手机投屏技巧:手机怎么投屏到电脑显示屏上?精选6招解决!

手机怎么投屏到电脑显示屏上&#xff1f;出于一些不同的原因&#xff0c;大多数人都希望能将手机投屏到电脑上。其中一个常见的原因是&#xff0c;大家经常会希望在笔记本电脑上共享图片&#xff0c;而无需上传或者登录微信进行文件传输。以及希望不依靠投影仪&#xff0c;就能…

只刷题可以通过PMP考试吗?

咱们都知道&#xff0c;PMBOK那本书&#xff0c;哎呀&#xff0c;读起来确实有点费劲。所以&#xff0c;有些人就想了&#xff0c;干脆我就刷题吧&#xff0c;题海战术&#xff0c;没准儿也能过。这话啊&#xff0c;听起来似乎有点道理&#xff0c;但咱们得好好琢磨琢磨。 刷题…

Linux: 为什么不应该在内核代码中使用 volatile ?

文章目录 1. 前言2. 背景3. 为什么不应该在内核代码中使用 volatile &#xff1f;4. 参考资料 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 本文基于 Linux 内核文档 Why the “volati…

【YashanDB知识库】自动选举配置错误引发的一系列问题

问题现象 问题出现的步骤/操作&#xff1a; ● 配置自动选举&#xff0c;数据库备库手动发起switch over&#xff0c;命令会报错 ● 主、备库变为只读状态&#xff0c;数据库无法进行读写操作 ● shutdown immediate 停止数据库&#xff0c;此时发现数据库一直没有退出&…

C++ Primer Chapter 2 Variables and Basic Types

C Primer Chapter 2 Variables and Basic Types 2024/05/27 2.3 复合类型 引用 定义 通过将声明符写成&d的形式来定义引用类型&#xff0c;其中d是声明的变量名。 int ival1024; int &refValival; int &refVal2; //报错&#xff1a;引用必须被初始化 引用即别名 …

script 标签中 defer 和 async 属性的区别

script 标签中的 defer Vs. async 在 HTML 中&#xff0c;script 标签可以使用 defer 和 async 属性来控制外部 JavaScript 脚本加载和执行的方式。defer 和 async 都可以提高页面的加载性能&#xff0c;主要区别整理如下。 区别点deferasync加载顺序按顺序加载异步加载&…

论文笔记:Vision GNN: An Image is Worth Graph of Nodes

neurips 2022 首次将图神经网络用于视觉任务&#xff0c;同时能取得很好的效果 1 方法 2 架构 在计算机视觉领域&#xff0c;常用的 transformer 通常是 isotropic 的架构&#xff08;如 ViT&#xff09;&#xff0c;而 CNN 更喜欢使用 pyramid 架构&#xff08;如 ResNet&am…

开源数据库同步工具DBSyncer

前言&#xff1a; 这么实用的工具&#xff0c;竟然今天才发现&#xff0c;相见恨晚呀&#xff01;&#xff01;&#xff01;&#xff01; DBSyncer&#xff08;英[dbsɪŋkɜː]&#xff0c;美[dbsɪŋkɜː 简称dbs&#xff09;是一款开源的数据同步中间件&#xff0c;提供M…

必看项目|多维度揭示心力衰竭患者生存关键因素(生存分析、统计检验、随机森林)

1.项目背景 心力衰竭是一种严重的公共卫生问题,影响着全球数百万人的生活质量和寿命,心力衰竭的病因复杂多样,既有个体生理因素的影响,也受到环境和社会因素的制约,个体的生活方式、饮食结构和医疗状况在很大程度上决定了其心力衰竭的风险。在现代社会,随着生活水平的提…

使用moquette mqtt发布wss服务

文章目录 概要一、制作的ssl证书二、配置wss小结 概要 moquette是一款不错的开源mqtt中间件&#xff0c;github地址&#xff1a;https://github.com/moquette-io/moquette。我们在发布mqtt服务的同时&#xff0c;是可以提供websocket服务器的&#xff0c;有些场景下需要用到&a…