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

0基础学C#笔记09:希尔排序法

文章目录

  • 前言
  • 一、希尔排序的思想
  • 二、使用步骤
  • 总结


前言

希尔排序可以说是插入排序的一种变种。无论是插入排序还是冒泡排序,如果数组的最大值刚好是在第一位,要将它挪到正确的位置就需要 n - 1 次移动。也就是说,原数组的一个元素如果距离它正确的位置很远的话,则需要与相邻元素交换很多次才能到达正确的位置,这样是相对比较花时间了。希尔排序就是为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进行排序。

一、希尔排序的思想

采用插入排序的方法,先让数组中任意间隔为 h 的元素有序,刚开始 h 的大小可以是 h = n / 2,接着让 h = n / 4,让 h 一直缩小,当 h = 1 时,也就是此时数组中任意间隔为1的元素有序,此时的数组就是有序的了。
为方便理解我还准备了图片:
在这里插入图片描述
如果还是不懂的话我还给你准备了优质的文章讲解:希尔排序

二、使用步骤

public class ShellSort {public static int[] shellSort(int arr[]) {if (arr == null || arr.length < 2) return arr;int n = arr.length;// 对每组间隔为 h的分组进行排序,刚开始 h = n / 2;for (int h = n / 2; h > 0; h /= 2) {//对各个局部分组进行插入排序for (int i = h; i < n; i++) {// 将arr[i] 插入到所在分组的正确位置上insertI(arr, h, i);}}return arr;}/*** 将arr[i]插入到所在分组的正确位置上* arr[i]] 所在的分组为 ... arr[i-2*h],arr[i-h], arr[i+h] ...*/private static void insertI(int[] arr, int h, int i) {int temp = arr[i];int k;for (k = i - h; k > 0 && temp < arr[k]; k -= h) {arr[k + h] = arr[k];}arr[k + h] = temp;}
}

总结

需要注意的是,对各个分组进行插入的时候并不是先对一个组排序完了再来对另一个组排序,而是轮流对每个组进行排序。

性质:
1、时间复杂度:O(nlogn)
2、空间复杂度:O(1)
3、非稳定排序
4、原地排序

相关文章:

0基础学C#笔记09:希尔排序法

文章目录 前言一、希尔排序的思想二、使用步骤总结 前言 希尔排序可以说是插入排序的一种变种。无论是插入排序还是冒泡排序&#xff0c;如果数组的最大值刚好是在第一位&#xff0c;要将它挪到正确的位置就需要 n - 1 次移动。也就是说&#xff0c;原数组的一个元素如果距离它…...

DOCKER的容器

1. 什么是Container&#xff08;容器&#xff09; 要有Container首先要有Image&#xff0c;也就是说Container是通过image创建的。 Container是在原先的Image之上新加的一层&#xff0c;称作Container layer&#xff0c;这一层是可读可写的&#xff08;Image是只读的&#xff0…...

跳跃游戏——力扣55

文章目录 题目描述解法一 贪心题目描述 解法一 贪心 bool canJump(vector<int>& nums){int n=nums....

将本地项目上传至gitee的详细步骤

将本地项目上传至gitee的详细步骤 1.在gitee上创建以自己项目名称命名的空项目2.进入想上传的项目的文件夹&#xff0c;然后右键点击3. 初始化本地环境&#xff0c;把该项目变成可被git管理的仓库4.添加该项目下的所有文件5.使用如下命令将文件添加到仓库中去6.将本地代码库与远…...

iOS开发-导航栏UINavigationBar隐藏底部线及透明度

iOS 导航栏UINavigationBar隐藏底部线及透明度 苹果官方给出的解释&#xff1a; 如果你不调用方法设置一张背景图片的话&#xff0c;那就给你默认一张&#xff0c;然后同时还有一张阴影图片被默认设置上去&#xff0c;这就是导航栏上1px黑线的由来。 解决办法&#xff1a; 方…...

题目:2520.统计能整除数字的位数

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;2520. 统计能整除数字的位数 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 逐位判断即可。 解题代码&#xff1a; class Solution {public int countDigits(int num) {int res0;int ori…...

matplotlib 笔记 注释annotate

在图中的特定位置添加文本注释、箭头和连接线&#xff0c;以便更清晰地解释图形中的数据或信息 主要参数 text文本内容xy箭头指向的目标点的坐标xytext注释文本的坐标arrowprops 一个字典&#xff0c;指定注释箭头的属性&#xff0c;如颜色、箭头样式等 没有arrowprops的时候…...

Windows 无法安装到这个硬盘。选中的磁盘具有MBR分区。在EFI系统上,Windows只能安装到GPT磁盘

Windows无法安装到这个磁盘,选中的磁盘具有MBR分区表的解决方法 - 知乎 (zhihu.com) Windows无法安装到这个磁盘 选中的磁盘具有MBR分区表 - 知乎 (zhihu.com) 选中的磁盘具有MBR分区表&#xff0c;在EFI系统上&#xff0c;windows只能安装到GPT磁盘_选中的磁盘具有mbr分区表…...

学C的第三十三天【C语言文件操作】

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十二天【动态内存管理】_高高的胖子的博客-CSDN博客 1 . 为什么要使用文件 以前面写的通讯录为例&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录中增加、删…...

线性表的基本操作及在顺序存储及链式存储的实现

目录 线性表的基本操作&#xff1a;线性表的在顺序存储上的实现 线性表的基本操作&#xff1a; 一个数据结构的基本操作是指其最核心、最基本的操作。其他较复杂的操作可通过其基本操作来实现。线性表的主要操作如下 - InitList(&L):初始化表。构造一个空的线性表- Length…...

合宙Air724UG LuatOS-Air script lib API--nvm

nvm Table of Contents nvm nvm.init(defaultCfgFile, burnSave) nvm.set(k, v, r, s) nvm.sett(k, kk, v, r, s) nvm.flush() nvm.get(k) nvm.gett(k, kk) nvm.restore() nvm.remove() nvm 模块功能&#xff1a;参数管理 nvm.init(defaultCfgFile, burnSave) 初始化参数存储管…...

springboot单元测试的详细介绍

当开发一个复杂的应用程序时&#xff0c;确保代码的正确性和稳定性至关重要。在这方面&#xff0c;单元测试是一个不可或缺的工具&#xff0c;它可以帮助开发人员验证代码的各个部分是否按预期工作。Spring Boot提供了丰富的测试支持&#xff0c;使编写和执行单元测试变得更加容…...

Apache Doris 入门教程26:资源管理

为了节省Doris集群内的计算、存储资源&#xff0c;Doris需要引入一些其他外部资源来完成相关的工作&#xff0c;如Spark/GPU用于查询&#xff0c;HDFS/S3用于外部存储&#xff0c;Spark/MapReduce用于ETL, 通过ODBC连接外部存储等&#xff0c;因此我们引入资源管理机制来管理Do…...

【金融量化】Python实现根据收益率计算累计收益率并可视化

1 理论 理财产品&#xff08;本金100元&#xff09; 第1天&#xff1a;3% &#xff1a;&#xff08;13%&#xff09; ✖ 100 103 第2天&#xff1a;2% &#xff1a;&#xff08;12%&#xff09;✖ 以上 103 2.06 第3天&#xff1a;5% : &#xff08;15%&#xff09;✖ 以上…...

解读spring中@Value 如何将配置转自定义的bean

实现方式 着急寻求解决方式的猿友先看这块 定义配置转化类 public class UserConverter implements Converter<String, List<User>> {Overridepublic List<User> convert(String config) {if (StringUtils.isEmpty(config)) {return Collections.emptyLis…...

前端开发实习总结参考范文(合集)

▼前端开发实习总结篇一 今天就简单聊聊上面的StrutsSpringHibernate吧。 Struts 代表&#xff1a;表示层;Spring代表&#xff1a;业务逻辑层;Hibernate则代表持久层。他们是目前在Java Web编程开发中用得最多的框架&#xff0c;其实这样区分是为了适应软件开发过程中各个分工…...

♥ vue中$forceUpdate()

♥ vue中$forceUpdate() 1、认识 强制该组件重新渲染 鉴于 Vue 的全自动响应性系统&#xff0c;这个功能应该很少会被用到 $forceUpdate()迫使vue实例重新&#xff08;rander&#xff09;渲染虚拟DOM&#xff0c;注意并不是重新加载组件。 结合vue的生命周期&#xff0c;调用…...

Java一般用于postgis空间数据库通用的增删查改sql命令

目录 1 增加 2 删除 3 查询 4 更新 "public"."JGSQGW_Geo"为某模式下得表 一般postgrel有这样的设计模式 1 增加 #前端绘制出的数据插入 INSERT INTO "public"."JGSQGW_Geo" ( "geom","gridone","gridon…...

【C++类和对象】类有哪些默认成员函数呢?(上)

目录 1. 类的6个默认成员函数 2. 构造函数(*^▽^*) 2.1 概念 2.2 特性 3. 析构函数(*^▽^*) 3.1 概念 3.2 特性 4. 拷贝构造函数(*^▽^*) 4.1 概念 4.2 特性 5. 赋值运算符重载(*^▽^*) 5.1 运算符重载 5.2 赋值运算符重载 ヾ(๑╹◡╹)&#xff89;"人总要为…...

(docker)mysql镜像拉取-创建容器-容器的使用【个人笔记】

【容器的第一次创建】 容器的第一次创建&#xff0c;需要先下载镜像&#xff0c;从 镜像拉取 0、可以搜索镜像的版本 docker search mysql1、先拉取MySQL的镜像&#xff0c;默认拉取最新版&#xff0c;使用下面的命令拉取mysql镜像 docker pull mysql也可以指定mysql的版本…...

颠覆传统:March7thAssistant让崩坏星穹铁道自动化游戏体验提升10倍

颠覆传统&#xff1a;March7thAssistant让崩坏星穹铁道自动化游戏体验提升10倍 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant March7thAssistant&#xff08;三月七…...

Curvature as Safety: A Geometric Framework for Detecting Cognitive Singularities in Agentic AI

Curvature as Safety: A Geometric Framework for Detecting Cognitive Singularities in Agentic AI (曲率即安全&#xff1a;面向Agentic AI认知奇点的几何检测框架)作者&#xff1a;方见华 单位&#xff1a;世毫九实验室第一部分&#xff1a;问题定义&#xff08;The Hook&a…...

MemPalace:构建最强 AI 记忆系统实战指南

&#x1f44b; 你好&#xff0c;我是专注于 AI 工程化落地的技术博主。本文适合正在构建长期记忆型 LLM 应用、苦恼于上下文丢失的开发者阅读。为了验证 MemPalace 的实际效能&#xff0c;我耗时 3 天进行了深度部署与压力测试。本文承诺不翻译文档&#xff0c;只分享经过验证的…...

Yi-Coder-1.5B快速体验:在Ollama上测试代码生成,结果出乎意料

Yi-Coder-1.5B快速体验&#xff1a;在Ollama上测试代码生成&#xff0c;结果出乎意料 最近在尝试各种本地部署的代码生成模型&#xff0c;想找一个既轻量又好用的工具。听说了零一万物开源的Yi-Coder-1.5B&#xff0c;只有15亿参数&#xff0c;但据说编程能力很强。我抱着试试…...

郭老师-改命三部曲:婚姻、事业与学习

改命三部曲 ——婚姻、事业与学习“认命是悲观的逻辑&#xff0c; 人生要不认命&#xff0c; 不认命就要改你的命。”&#x1f33f; 改命的关键&#xff0c;在于选择对、选择好&#xff0c; 并具备强大的自我重构能力。⚠️ 一、婚姻&#xff1a;从“我”到“我们” 婚姻的本质…...

【JavaScript高级编程】拆解函数流水线 上犯

一、什么是setuptools&#xff1f; setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你&#xff1a; 定义 Python 包的元数据&#xff08;如名称、版本、作者等&#xff09;。 声明包的依赖项&#xff0c;确保你的包能够正确运行。 构建源代码分发包&…...

爬虫自动化:数据采集与智能运维实战,人形机器人的发展历程、技术演进与未来图景。

爬虫与自动化技术概述 爬虫与自动化技术是现代数据采集与智能运维的核心工具。爬虫通过模拟浏览器行为或直接请求接口获取目标数据&#xff0c;自动化技术则用于数据处理、任务调度和系统监控。两者结合可构建高效的数据管道&#xff0c;覆盖从数据采集到智能运维的全流程。核心…...

沈阳城市路灯工厂哪家强

大家好&#xff0c;我是你们的老朋友小明。今天咱们聊聊沈阳的路灯工厂&#xff0c;看看哪家更靠谱。说到这事儿&#xff0c;我可是做了不少功课&#xff0c;也走访了好几家工厂&#xff0c;希望我的分享能帮到正在为选路灯头疼的你。一、沈阳路灯市场现状1. 市场竞争激烈在沈阳…...

bge-large-zh-v1.5实测效果:长文本语义匹配精准度展示

bge-large-zh-v1.5实测效果&#xff1a;长文本语义匹配精准度展示 1. 引言 1.1 语义匹配的重要性 在信息爆炸的时代&#xff0c;如何从海量文本中找到语义相关的内容成为关键挑战。无论是构建智能客服系统、开发精准搜索引擎&#xff0c;还是实现文档自动分类&#xff0c;都…...

DeepSeek-R1-Distill-Qwen-1.5B案例展示:数学推理能力超越GPT-4o

DeepSeek-R1-Distill-Qwen-1.5B案例展示&#xff1a;数学推理能力超越GPT-4o 1. 模型核心能力解析 1.1 技术架构亮点 DeepSeek-R1-Distill-Qwen-1.5B采用知识蒸馏技术&#xff0c;将Qwen2.5-Math-1.5B基础模型与R1架构优势相结合。其核心创新点包括&#xff1a; 参数压缩技…...