希尔(Shell)排序
文章目录
- 希尔排序的基本思想
- 本质
- 增量(间隔)的选取
- 希尔排序的时间复杂度
- 希尔排序代码实现
- 希尔排序的稳定性
希尔排序的基本思想
将要排序的序列按一定间隔(增量)分组,将每一组的数据按插入排序进行排序,再缩小间隔,再分组,再将每一组的数据按插入排序进行排序,直到间隔为1时整个序列为一组
而插入排序就是将就相邻(间隔为1)的数据比较进而排序,所以间隔为1时就是插入排序
例:

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
本质
希尔排序算法是直接插入排序算法的一种改进,减少了其复制的次数,速度要快很多。
原因是,当n值很大时数据项每一趟排序需要移动的个数很少,但数据项的距离很长。当n值减小时每一趟需要移动的数据增多,此时已经接近于它们排序后的最终位置。 正是这两种情况的结合才使希尔排序效率比插入排序高很多
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
增量(间隔)的选取
希尔排序的性能与所选取的增量(间隔)大小有很大关系
但是最优的增量(间隔)选取与序列数据之间的关系至今还是难题
不过一般使希尔排序增量的选取是要排序序列数据个数除以2,直到增量为1.
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
希尔排序的时间复杂度
希尔排序的时间的时间复杂度为O(N^1.5),希尔排序时间复杂度的下界是
O(N*logN)
所以希尔排序没有快速排序/堆排序等那那么快[O(N*logN)],但是希尔排序在中等大小规模表现较好,对规模非常大的数据排序不是最优选
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
希尔排序代码实现
希尔排序代码实现其实很简单,就是把直接插入的代码中的增量1,全部换成变化的增量,
然后再在外面套一个增量变化的循环,就可以了。


与插入排序的代码比较

一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
希尔排序代码
void ShellSort(int a[], int n)
{//gap是间隔(增量)int gap = n;while (gap > 1){gap /= 2;//间隔(增量)每次循环都缩小一半//end表示 每一组 有序序列最末尾的元素的下标int end = 0;//tmp表示 每一组 无序序列的第一个元素的下标int tmp = 0;int i = 0;//把插入排序中的1都换成gapfor (i = 0; i < n - gap; i++){end = i;tmp = a[end + gap];while (end >= 0)//end{//如果前gap个元素大于后gap个,就让前gap个向后移gap位//给后gap个可插入的空隙if (a[end] > tmp){a[end + gap] = a[end];end-=gap;}else{ //因为是从已经有序的序列的末尾向前插入//所以前一个之前的元素都比它小,所以不用再比较,直接结束循环break;}}//插入空出的空隙a[end + gap] = tmp;}}
}
一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一
希尔排序的稳定性
希尔排序根据增量不同,分组不同,相等的元素可能会被分到不同的组,进而可能在不同的插入排序过程中相等的元素的相对位置改变。
所以希尔排序是不稳定的
相关文章:
希尔(Shell)排序
文章目录 希尔排序的基本思想本质增量(间隔)的选取 希尔排序的时间复杂度希尔排序代码实现希尔排序的稳定性 希尔排序的基本思想 将要排序的序列按一定间隔(增量)分组,将每一组的数据按插入排序进行排序,再…...
【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案
Qt Creator 下载地址(含历史版本):https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1,安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料(Qt C…...
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动
树莓派5 Ubuntu 23.04 安装 DisplayLink 驱动 PreparationSynaptics APT RepositoryInstall evdiInstall displaylink-driver Preparation lsusb -d 17e9: sudo apt-get install dkmsSynaptics APT Repository wget https://www.synaptics.com/sites/default/files/Ubuntu/po…...
SpringBoot 实现 PDF 添加水印有哪些方案
SpringBoot 实现 PDF 添加水印有哪些方案 方式一:使用 Apache PDFBox 库方式二:使用 iText 库方式三:用 Ghostscript 命令行方式四:Free Spire.PDF for Java方式五:Aspose.PDF for Java 简介 PDF(Portable …...
【blender渲染】blender流体模拟基础
各位新年好哇,最近在做demo的时候,为了更好的效果,开始摸索一点离线渲染的东西。像这种后续渲染的处理,由于3ds max是更偏向于建模的dcc,有点不那么好使(没有说看不起vray的意思哈)。 像在实时…...
小白进阶之字符串处理
#include <cstdio> #include <cstring> int main() {char str[105];int count0,len0;scanf("%s",str);//输入字符lenstrlen(str);//求字符长for(int i0;i<len;i){if(str[i]A)//匹配计数count;}printf("%d",count); }#include <cstdio>…...
自定义Dubbo RPC通信协议
前言 Dubbo 协议层的核心SPI接口是org.apache.dubbo.rpc.Protocol,通过扩展该接口和围绕的相关接口,就可以让 Dubbo 使用我们自定义的协议来通信。默认的协议是 dubbo,本文提供一个 Grpc 协议的实现。 设计思路 Google 提供了 Java 的 Grpc…...
VB6.0报错:操作符AddressOf使用无效
VB调试,尝试调用DLL中的方法并带有回调函数,报错提示: 操作符AddressOf使用无效 代码: Private Sub btnScan_Click()... WCHBLEStartScanBLEDevices AddressOf callBackEnd Sub This function is called from the dll Public Fu…...
SpringCloud Aliba-Sentinel【中篇】-从入门到学废【5】
目录 1.流控规则 2. 熔断规则 3.热点规则 1.流控规则 1.资源名:唯一名称,默认请求路径 2.针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源) 3.阈值类型/单机阈值: QPS(每秒钟的请求数量&…...
四、基础篇 vue条件渲染
v-if v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。 <template><div class"content"><div v-if"show">show渲染了</div></div> </template><script> export de…...
广东金牌电缆:法大大电子合同助力业务风险管控
广东金牌电缆集团股份有限公司(以下简称“广东金牌电缆”)成立于2013年,现为广东省电线电缆重点生产企业、广东省守合同重信用单位、国家专精特新小巨人企业、国家高新技术企业,拥有自主商标“夺冠”,“夺冠”商标被评…...
机器学习周刊第五期:一个离谱的数据可视化Python库、可交互式动画学概率统计、机器学习最全文档、快速部署机器学习应用的开源项目、Redis 之父的最新文章
date: 2024/01/08 这个网站用可视化的方式讲解概率和统计基础知识,很多内容还是可交互的,非常生动形象。 大家好,欢迎收看第五期机器学习周刊 本期介绍7个内容,涉及Python、概率统计、机器学习、大模型等,目录如下: 一个离谱的Python库看见概率,看见统计2024机器学习最…...
vue和react的hooks
一、什么是hooks 直译“钩子”,在程序中代表,系统运行在某一时期时,会调用注册在该时机的回调函数。例如浏览器提供的onload或addEventListener能注册在浏览器各种时机调用的方法。 二、react中的hooks 一系列以“use”作为开发的方法&…...
2024.1.19
今天狠狠地复习了一下C语言,不复习不知道,一复习吓一跳昂,这感觉好多都忘却了,这并非一件好事,所以说还好复习了,不然考试就有点问题了,但是还好写一下这些代码就马上想起来了,所以说…...
上位机编程:CP56Time2a格式精讲
Cp56Time2a介绍: Cp56Time2a是西门子PLC(可编程逻辑控制器)中用于时间数据传输的一种特殊格式,主要用于PCS7和基于TCP/IP的S7通信过程中。这种时间格式主要为了确保在不同的系统和设备之间进行精确的时间同步。 Cp56Time2a格式&a…...
Webpack5入门到原理12:处理 Html 资源
1. 下载包 npm i html-webpack-plugin -D 2. 配置 webpack.config.js const path require("path"); const ESLintWebpackPlugin require("eslint-webpack-plugin"); const HtmlWebpackPlugin require("html-webpack-plugin");module.expo…...
Vue3-Axios二次封装与Api接口统一管理
一、安装axios npm i axios 二、创建utils工具文件夹 创建request.ts文件 import axios from axios //引入element-plus消息提示 import { ElMessage } from element-plus //引入用户相关的仓库 import useUserStore from /store/modules/user //使用axios对象create方法,创建…...
RHCE: 主从DNS服务器配置 (实现正反向解析)
主服务器配置: 准备工作: #关闭防火墙 [root192 ~]# systemctl stop firewalld#关闭selinux [root192 ~]# setenforce 0#查看selinux状态 [root192 ~]# getenforce Permissive#安装bind包 [root192 ~]# yum install bind -y#查询软件包下的文件 /etc/named.conf #主配置文…...
Git学习笔记(第6章):GitHub操作(远程库操作)
目录 6.1 远程库操作 6.1.1 创建远程库 6.1.2 命名远程库 6.1.3 本地库推送到远程库(push) 6.1.4 远程库拉取到本地库(pull) 6.1.5 远程库克隆到本地库(clone) 6.2 团队内协作 6.3 跨团队协作 6.4 SSH免密登录 6.1 远程库操作 命令 作用 git remote -v 查看所有远程…...
【主题广范|见刊快】2024年海洋工程与测绘遥感国际学术会议(ICOESRS 2024)
【主题广范|见刊快】2024年海洋工程与测绘遥感国际学术会议(ICOESRS 2024) 2024 International Conference Ocean Engineering and Surveying Remote Sensing(ICOESRS 2024) 一、【会议简介】 随着人类对海洋的认识和开发不断深入,海洋工程和测绘遥感技术的研究和应…...
手把手教你将自定义视频问答JSON转成EasyR1可用的Parquet数据集
手把手教你将自定义视频问答JSON转成EasyR1可用的Parquet数据集 当你在构建视频问答模型时,可能已经收集了大量结构化的JSON格式数据,但如何将这些数据适配到EasyR1框架中却成了一个技术难题。本文将为你提供一个从零开始的完整解决方案,解决…...
OpenClaw创始人加入OpenAI:这不是跳槽新闻,是整个AI行业换挡的信号
OpenClaw创始人加入OpenAI:这不是跳槽新闻,是整个AI行业换挡的信号摘要OpenClaw创始人Peter Steinberger正式加入OpenAI,项目移交开源基金会。Sam Altman亲自官宣,称他是"天才"。这件事的真正意义不在人事变动ÿ…...
MusePublic圣光艺苑惊艳效果:大气照明+表达性纹理细节放大展示
MusePublic圣光艺苑惊艳效果:大气照明表达性纹理细节放大展示 1. 引言:当古典艺术遇见AI算力 想象一下,你走进一间19世纪的画室。空气中弥漫着亚麻籽油和矿物颜料的味道,阳光透过高窗洒在亚麻画布上,墙上挂着鎏金画框…...
nlp_structbert_sentence-similarity_chinese-large保姆级教学:模型路径自定义、多模型切换、Web界面汉化配置
nlp_structbert_sentence-similarity_chinese-large保姆级教学:模型路径自定义、多模型切换、Web界面汉化配置 1. 引言:为什么需要这个工具? 你是不是经常遇到这样的情况:需要判断两段中文文字是不是表达同一个意思,…...
TCC性能瓶颈到底卡在哪?:用Arthas+Metrics精准定位4大隐性耗时源并实测压降67%
第一章:TCC性能瓶颈到底卡在哪? TCC(Try-Confirm-Cancel)模式虽能保障分布式事务的强一致性,但其性能损耗远高于本地事务——根本原因并非网络延迟本身,而是其固有的三阶段协同机制与资源生命周期管理带来的…...
SEO_五个立竿见影的页面SEO优化技巧指南
SEO优化技巧:快速提升网站页面排名的五个有效方法 在当前竞争激烈的互联网环境中,网站的SEO优化是至关重要的。无论是新建的网站还是已有网站,都需要通过一系列的SEO优化技巧来提升其在搜索引擎上的排名。下面,我们将分享五个立竿…...
MelonLoader终极指南:Unity游戏Mod加载器从入门到精通
MelonLoader终极指南:Unity游戏Mod加载器从入门到精通 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 还在为Unity游…...
视频防抖新范式:从陀螺仪数据到稳定画面的技术革命——影像创作者的开源解决方案
视频防抖新范式:从陀螺仪数据到稳定画面的技术革命——影像创作者的开源解决方案 【免费下载链接】gyroflow Video stabilization using gyroscope data 项目地址: https://gitcode.com/GitHub_Trending/gy/gyroflow 一、技术原理解析:GyroFlow如…...
开箱即用!Qwen-Image-2512-SDNQ Web服务快速体验指南
开箱即用!Qwen-Image-2512-SDNQ Web服务快速体验指南 1. 五分钟了解Qwen-Image-2512-SDNQ Web服务 你是否遇到过这样的场景:需要快速生成一张概念图,但打开专业设计软件太麻烦?或者想尝试AI绘画,却被复杂的模型部署步…...
告别GIL幻觉:基于subinterpreter+shared_memory的生产级无锁Pipeline(附GitHub星标1.2k的perf-validated模板库)
第一章:Python无锁GIL环境下的并发模型性能调优指南Python 的全局解释器锁(GIL)长期被视为 CPU 密集型并发的瓶颈,但现代 CPython 3.12 已实验性支持无 GIL 构建(通过 --without-pygil 配置选项)࿰…...
