当前位置: 首页 > news >正文

希尔(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)排序

文章目录 希尔排序的基本思想本质增量&#xff08;间隔&#xff09;的选取 希尔排序的时间复杂度希尔排序代码实现希尔排序的稳定性 希尔排序的基本思想 将要排序的序列按一定间隔&#xff08;增量&#xff09;分组&#xff0c;将每一组的数据按插入排序进行排序&#xff0c;再…...

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址&#xff08;含历史版本&#xff09;&#xff1a;https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1&#xff0c;安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料&#xff08;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 添加水印有哪些方案 方式一&#xff1a;使用 Apache PDFBox 库方式二&#xff1a;使用 iText 库方式三&#xff1a;用 Ghostscript 命令行方式四&#xff1a;Free Spire.PDF for Java方式五&#xff1a;Aspose.PDF for Java 简介 PDF&#xff08;Portable …...

【blender渲染】blender流体模拟基础

各位新年好哇&#xff0c;最近在做demo的时候&#xff0c;为了更好的效果&#xff0c;开始摸索一点离线渲染的东西。像这种后续渲染的处理&#xff0c;由于3ds max是更偏向于建模的dcc&#xff0c;有点不那么好使&#xff08;没有说看不起vray的意思哈&#xff09;。 像在实时…...

小白进阶之字符串处理

#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&#xff0c;通过扩展该接口和围绕的相关接口&#xff0c;就可以让 Dubbo 使用我们自定义的协议来通信。默认的协议是 dubbo&#xff0c;本文提供一个 Grpc 协议的实现。 设计思路 Google 提供了 Java 的 Grpc…...

VB6.0报错:操作符AddressOf使用无效

VB调试&#xff0c;尝试调用DLL中的方法并带有回调函数&#xff0c;报错提示&#xff1a; 操作符AddressOf使用无效 代码&#xff1a; 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.资源名&#xff1a;唯一名称&#xff0c;默认请求路径 2.针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default (不区分来源) 3.阈值类型/单机阈值&#xff1a; QPS&#xff08;每秒钟的请求数量&…...

四、基础篇 vue条件渲染

v-if v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。 <template><div class"content"><div v-if"show">show渲染了</div></div> </template><script> export de…...

广东金牌电缆:法大大电子合同助力业务风险管控

广东金牌电缆集团股份有限公司&#xff08;以下简称“广东金牌电缆”&#xff09;成立于2013年&#xff0c;现为广东省电线电缆重点生产企业、广东省守合同重信用单位、国家专精特新小巨人企业、国家高新技术企业&#xff0c;拥有自主商标“夺冠”&#xff0c;“夺冠”商标被评…...

机器学习周刊第五期:一个离谱的数据可视化Python库、可交互式动画学概率统计、机器学习最全文档、快速部署机器学习应用的开源项目、Redis 之父的最新文章

date: 2024/01/08 这个网站用可视化的方式讲解概率和统计基础知识,很多内容还是可交互的,非常生动形象。 大家好,欢迎收看第五期机器学习周刊 本期介绍7个内容,涉及Python、概率统计、机器学习、大模型等,目录如下: 一个离谱的Python库看见概率,看见统计2024机器学习最…...

vue和react的hooks

一、什么是hooks 直译“钩子”&#xff0c;在程序中代表&#xff0c;系统运行在某一时期时&#xff0c;会调用注册在该时机的回调函数。例如浏览器提供的onload或addEventListener能注册在浏览器各种时机调用的方法。 二、react中的hooks 一系列以“use”作为开发的方法&…...

2024.1.19

今天狠狠地复习了一下C语言&#xff0c;不复习不知道&#xff0c;一复习吓一跳昂&#xff0c;这感觉好多都忘却了&#xff0c;这并非一件好事&#xff0c;所以说还好复习了&#xff0c;不然考试就有点问题了&#xff0c;但是还好写一下这些代码就马上想起来了&#xff0c;所以说…...

上位机编程:CP56Time2a格式精讲

Cp56Time2a介绍&#xff1a; Cp56Time2a是西门子PLC&#xff08;可编程逻辑控制器&#xff09;中用于时间数据传输的一种特殊格式&#xff0c;主要用于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) 一、【会议简介】 随着人类对海洋的认识和开发不断深入&#xff0c;海洋工程和测绘遥感技术的研究和应…...

AI Coding 时代的工程策略革命:为什么 Monorepo 成了 AI 的“最佳拍档“?

AI Coding 时代的工程策略革命&#xff1a;为什么 Monorepo 成了 AI 的"最佳拍档"&#xff1f; 导读&#xff1a;当 AI 开始替你写代码&#xff0c;你的工程架构是否还在"拖后腿"&#xff1f;本文从 AI 的视角重新审视工程策略&#xff0c;深度解析为什么 …...

短波通讯:魔术6米波

制作一个用于50MHz&#xff08;6米波段&#xff09;的天线&#xff0c;是业余无线电爱好者探索这一“魔术波段”的基础。该频段天线相对短波天线更易于制作和架设&#xff0c;但良好的设计对捕捉稍纵即逝的远距离传播至关重要。以下是基于不同需求的天线类型、设计要点和制作指…...

Agent Runtime 重构:Session 作为事件日志的工程实践

1. 这不是新赛道&#xff0c;而是 runtime 层的“操作系统时刻”正在重演你有没有试过让一个 AI 代理连续工作四十分钟&#xff1f;不是闲聊&#xff0c;而是真干活&#xff1a;查数据库、调 API、读文档、写代码、改配置、再验证——一环扣一环。去年我带团队跑一个客户的数据…...

1987年7月14日晚上19-21点出生性格、运势和命运

1987年6月28日&#xff0c;距离二十四节气中的“小暑”&#xff08;通常在7月6-8日&#xff09;约8-10天。小暑意为“天气开始炎热但未到极致”&#xff0c;是盛夏的序曲。这个时节的哲学&#xff0c;与个人成长有着奇妙的呼应。性格的“小暑特质”&#xff1a;温润与韧性 小暑…...

Continental CICP1800RB继电器扩展板

Continental CICP1800RB 是一款继电器扩展板&#xff0c;专为工业控制系统中的信号隔离与负载驱动而设计&#xff0c;可有效扩展主控单元的输出能力。产品特点&#xff08;15条&#xff09;&#xff1a;CICP1800RB 提供 8 个继电器输出通道&#xff0c;满足多路负载控制需求每个…...

OpenClaw(小龙虾AI)Windows一键部署包v2.7.5|零代码+可视化操作

适配系统&#xff1a;Windows10 64 位&#xff08;纯小白友好版&#xff09; 核心优势&#xff1a;免命令行、免环境配置、解压即装&#xff0c;内置所有运行依赖&#xff0c;全程可视化操作&#xff0c;新手也能一次成功部署 2026 爆火的开源 AI 智能体&#xff01; 本文专属…...

创业公司如何借助 Taotoken 的多模型聚合能力快速验证产品 AI 功能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 创业公司如何借助 Taotoken 的多模型聚合能力快速验证产品 AI 功能 对于资源有限的创业团队而言&#xff0c;在产品早期快速验证核…...

3步掌握Jellyfin智能字幕插件:新手快速上手指南

3步掌握Jellyfin智能字幕插件&#xff1a;新手快速上手指南 【免费下载链接】jellyfin-plugin-maxsubtitle 一个 Jellyfin 中文字幕插件&#xff08;未来可以不局限中文&#xff09; 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-maxsubtitle MaxSubti…...

cann-recipes-infer:LLM 在昇腾上的推理参考实现

大模型推理部署跟小模型完全是两回事。小模型一张卡就能装下&#xff0c;调几个参数就能跑。LLaMA-70B 参数 140GB&#xff0c;需要多卡拆分&#xff1b;解码阶段逐 Token 生成&#xff0c;需要 KV Cache 优化&#xff1b;Attention 是 Memory Bound&#xff0c;需要 FlashAtte…...

FLUX.1-dev-Controlnet-Union:一站式多模态图像控制解决方案,让AI生成更精准可控

FLUX.1-dev-Controlnet-Union&#xff1a;一站式多模态图像控制解决方案&#xff0c;让AI生成更精准可控 【免费下载链接】FLUX.1-dev-Controlnet-Union 项目地址: https://ai.gitcode.com/hf_mirrors/InstantX/FLUX.1-dev-Controlnet-Union 你是否曾经在AI图像生成中遇…...