希尔排序(C#)

devtools/2025/2/14 4:18:00/

目录

 1  什么是希尔排序

 2  算法步骤

 3  代码实现


 1  什么是希尔排序

希尔排序是插入排序的一种更高效的改进版本,也称为缩小增量排序。它的基本思想是将原始数据分成多个子序列来进行插入排序,通过逐渐缩小子序列的间隔(增量),最终完成整个数组的排序。(学习本篇前先掌握插入排序)

与普通插入排序不同,希尔排序在排序初期允许元素进行较大距离的交换,这样可以快速将元素移动到接近其最终位置的地方,从而减少后续插入排序时的比较和移动次数,提高排序效率。

 2  算法步骤

  • 选择增量序列:选择一个初始增量,通常可以将数组长度的一半作为初始增量,后续不断将增量缩小,直到增量为 1。(结束条件是步长<=0)
  • 按增量进行分组插入排序:根据当前增量将数组分成若干个子序列,对每个子序列分别进行插入排序。
  • 缩小增量:将增量缩小,重复上一个步骤 ,直到增量为 1,此时整个数组就完成了排序。(之后的每一次都是在上一次步长的基础上/2)

 3  代码实现

我们分析希尔排序具体的排序方法是使用插入排序,基本原理是设置步长,然后不断缩小步长,直到步长为1时排序结束。

套路写法:一层获得步长,一层获取未排序区的元素,一层将内容插入到合适的位置。(以下代码的运行环境为unity2022,可供参考)

private void Test(){int[] arr ={ 8, 7, 1, 5, 4, 2, 6, 3, 9 };//确定步长//基本规则:每次步长变化都是/2//一开始步长 就是数组的长度/2//之后每一次 都是在上一次的步长基础上/2//结束条件是步长<=0//第三步 执行插入排序for(var step = arr.Length / 2; step > 0; step /= 2){//实现插入排序for (var i = step; i < arr.Length; i++){var noSortNum = arr[i];var sortIndex = i - step;while (sortIndex >= 0 && arr[sortIndex] > noSortNum){arr[sortIndex + step] = arr[sortIndex];sortIndex-=step;}arr[sortIndex + step] = noSortNum;}}foreach (var value in arr)Debug.Log(value);}

运行结果:


http://www.ppmy.cn/devtools/158671.html

相关文章

碰一碰发视频源码技术开发,支持OEM

一、引言 在当今数字化信息快速传播的时代&#xff0c;碰一碰发视频这种便捷的数据交互方式正逐渐走进人们的生活。从技术实现角度来看&#xff0c;其后台开发逻辑是确保整个功能稳定运行的关键。本文将深入剖析碰一碰发视频后台开发的核心逻辑&#xff0c;为开发者提供技术参…

DeepSeek 助力 Vue 开发:打造丝滑的进度条

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

34.Qt使用回调函数

新建Qt项目&#xff0c;添加回调函数所在的类Callback 项目文件如下所示 Callback.h代码 #ifndef CALLBACK_H #define CALLBACK_H#include <QObject>class Callback : public QObject {Q_OBJECT public:explicit Callback(QObject *parent nullptr);public:static voi…

ubuntu部署postgresql+timescaladb时序数据库

ubuntu部署postgresqltimescaladb时序数据库 中间件版本 postgresql-1414.15-0ubuntu0.22.04.1timescaledb-2-postgresql-142.17.2~ubuntu22.04 pg数据库安装 sudo apt install -y postgresql-1414.15-0ubuntu0.22.04.1 sudo systemctl start postgresql sudo systemctl en…

SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning)

SWIFT (Scalable lightWeight Infrastructure for Fine-Tuning) flyfish ms-swift是魔搭社区提供的大模型与多模态大模型训练部署框架。 https://github.com/modelscope/ms-swift 可扩展轻量级微调基础设施 依赖 PEFT (Parameter-Efficient Fine-Tuning): PEFT是一种针对大…

三天急速通关Spring6

三天急速通关Spring6 0 文章介绍1 介绍1.1 背景1.2 Spring2 Spring6入门程序2.1 准备环境2.2 配置文件2.3 Tips 3 IoC通过XML注入3.1 介绍3.2 Set注入3.2.1 简单类型注入 3.2.2 注入外部bean与内部bean3.2.3 其他类型注入3.3 Constructor注入&#xff0c;P注入&#xff0c;C注入…

2024主流Web框架横向对比:Gin、Laravel、ThinkPHP、Spring Boot及更多框架的选型指南

引言 随着Web开发的多样化,开发者需要根据项目需求选择合适的框架。本文从性能、开发效率、生态支持、学习曲线等维度,对比Gin(Go)、Laravel(PHP)、ThinkPHP(PHP)、Spring Boot(Java)、Django(Python)、Express.js(Node.js)和ASP.NET Core(C#)七大框架的核心优…

redis 缓存击穿问题与解决方案

前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…