排序算法之希尔排序(缩小增量排序)

 希尔排序是插入排序的优化,如果不了解插入排序可以看排序算法之插入排序-CSDN博客这篇博客,希尔排序算法通过对原始数据集使用 gap 分组的方法先将数据分组进行插入排序,随着排序的进行,逐渐减小 gap 的值,直至 gap 为1,此时进行最后一次类似插入排序的过程,但因为之前的预排序,数组已经接近有序,所以最后一次操作效率很高。这种方法相较于简单的插入排序大大减少了数据移动的次数,特别是在处理大规模乱序数组时,效率提升显著。因此,可以说希尔排序是对传统插入排序算法的一种有效改进或优化。

那么我们来看一下希尔排序是如何排序的吧!


 


 

 


 

那么代码是如何实现的呢?请看下面 

public static int[] shellsort(int[] array){int gap = array.length;while(gap>1){gap/=2;shell(array,gap);}return array;
}private static void shell(int[] arr,int gap){for (int i = gap; i < arr.length; i++) {int tmp = arr[i];int j = i-gap;for(;j>=0;j-=gap){if(arr[j] > tmp){arr[j+gap] = arr[j];} else {break;}}arr[j+gap] = tmp;}
}

对于希尔排序,由于对gap的不同取值会影响最终的时间复杂度

 

时间复杂度:大致O(n^1.25)到O(1.6*n^1.25)

空间复杂度:O(1)

稳定性:不稳定,因为在不同的步长下,相等的元素可能会因为插入排序的过程中被重新安排位置,从而改变它们之间的原始相对顺序。因此,如果数据序列中存在相等的元素,并且对这些元素的原始顺序有保持要求,那么希尔排序可能不是最合适的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

一个肉夹馍思考的零耦合设计

刷抖音听说知识付费是普通人的一个收入增长点&#xff0c;写了三十几篇文章一毛钱没赚&#xff0c;感觉有点沮丧。天上下着小雨雨&#xff0c;稀稀嗦嗦的&#xff0c;由于了很久还是买了一个&#x1f928;。 忽然觉得生活有点悲催&#xff0c;现在已经变得斤斤计较&#xff0c;…

TCP重传机制——快速重传

TCP 有一种快速重传机制&#xff0c;它不以时间为驱动&#xff0c;而是以数据驱动重传。 在上图&#xff0c;发送方发出了 1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5 份数据&#xff1a; 第一份 Seq1 先送到了&#xff0c;于是就 Ack 回 2&#xff1b;结果 Seq2…

自定义数据上的YOLOv9分割训练

原文地址&#xff1a;yolov9-segmentation-training-on-custom-data 2024 年 4 月 16 日 在飞速发展的计算机视觉领域&#xff0c;物体分割在从图像中提取有意义的信息方面起着举足轻重的作用。在众多分割算法中&#xff0c;YOLOv9 是一种稳健且适应性强的解决方案&#xff0…

vue2项目webpack3.x打包文件分割优化加载

vue2项目webpack3.x打包文件分割优化加载 0. 项目目录和依赖信息1. 开启 gzip&#xff08;建议&#xff09;2. vue2项目配置懒加载&#xff08;建议&#xff09;3. 拆分 vendor 包注意&#xff1a;webpack3使用CommonsChunkPlugin实现 本文使用 3 种方案进行叠加优化 优先级按以…

JavaWeb--1.Servlet

Servlet&#xff08;基础&#xff09; 1、配置依赖&#xff1a; ​ 在pom.xml文件中加入相关依赖 <dependencies><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>5.0.0&l…

021、Python+fastapi,第一个Python项目走向第21步:ubuntu 24.04 docker 安装mysql8、redis(二)

系列文章目录 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 安装redis 我会以三种方式安装&#xff0c; 第一、直接最简单安装&#xff0c;适用于测试环境玩玩 第二、conf配置安装 第三、集群环境安装 一…

【简单介绍下Lisp的学习历程】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

k8s笔记 | Ingress

安装Ingress 添加helm创库 Installation Guide - Ingress-Nginx Controller Ingress | Kubernetes 下载包 将 文件helm 放到 /usr/local/bin/ 并给到执行权限 # 添加可执行权限 chmod ux helm # 测试是否能运行 helm version# 结果 version.BuildInfo{Version:"v3.14…

Eclipse 开创性地集成 Neon Stack,将 EVM 兼容性带到 SVM 网络

2024年5月2日&#xff0c;全球——在塑造区块链网络的战略联盟的过程中&#xff0c;Eclipse 通过集成 Neon EVM 核心团队开发的技术堆栈 Neon Stack&#xff0c;成为首个打破 EVM-SVM 兼容性障碍的生态。 Eclipse 旨在通过结合以太坊和 Solana 的最佳特性&#xff0c;来重构区…

【CTF Reverse】XCTF GFSJ0487 game Writeup(反编译+逆向工程)

game 菜鸡最近迷上了玩游戏&#xff0c;但它总是赢不了&#xff0c;你可以帮他获胜吗 解法 放进 exeinfope 中分析。 拖入 IDA 中。shift f12 查看字符串。ctrl f 搜索 flag。 DATA XREF: sub_45E94028↑o Function 中搜索 sub_45E940。 flag 应该是在这里算出来的&#xff…

C#语言入门

一、基础知识 1. 程序语言是什么 用于人和计算机进行交流&#xff0c;通过程序语言让计算机能够响应我们发出的指令 2. 开发环境 IDE&#xff0c;集成开发环境。它就是一类用于程序开发的软件&#xff0c;这一类软件一般包括了代码编辑、编译器、调试器、图形用户界面等等工…

MTEB - Embedding 模型排行榜

文章目录 关于 MTEBMTEB 任务和数据集概览使用 MTEB Pythont 库Installation使用 关于 MTEB MTEB : Massive Text Embedding Benchmark github : https://github.com/embeddings-benchmark/mtebhuggingface : https://huggingface.co/spaces/mteb/leaderboardpaper : https:/…

微信小程序的执行流程

1.首先会进入app.js 打开微信小程序首先会进入app.js,在app.js中会写入App()方法&#xff0c;App()接受一个object参数&#xff0c;用于指定小程序的生命周期等。App()方法有且仅有一个。 App()的object参数及其描述&#xff1a; onLaunch&#xff1a;监听小程序显示&#x…

【云原生】Docker 实践(五):搭建私有镜像 Harbor

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

一机游领航旅游智慧化浪潮:借助前沿智能设备,革新旅游服务效率,构建高效便捷、生态友好的旅游服务新纪元,开启智慧旅游新时代

目录 一、引言 二、一机游的定义与特点 &#xff08;一&#xff09;一机游的定义 &#xff08;二&#xff09;一机游的特点 三、智能设备在旅游服务中的应用 &#xff08;一&#xff09;旅游前的信息查询与预订支付 &#xff08;二&#xff09;旅游中的导航导览与互动体…

Jupyter Notebook魔术命令

Jupyter Notebook是一个基于网页的交互式笔记本&#xff0c;支持运行多种编程语言。 Jupyter Notebook 的本质式一个Web应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实现代码&#xff0c;数学方程&#xff0c;可视化和markdown。用途包括&#xff1a;数据…

thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程

介绍 thinkphp家政上门预约服务小程序家政保洁师傅上门服务小程序上门服务在线派单安装教程 上门预约服务派单小程序家政小程序同城预约开源代码独立版安装教程 程序完整&#xff0c;经过安装检测&#xff0c;可放心下载安装。 适合本地的一款上门预约服务小程序&#xff0…

机器学习之基于Jupyter中国环境治理投资数据分析及可视化

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 机器学习之基于Jupyter中国环境治理投资数据分析及可视化项目是一个结合了机器学习和数据可视化技术的项目&#xf…

MySQL-数据缓冲池(Buffer Pool)

InnoDB存储引擎以 页 为单位管理存储空间&#xff0c;增删改查的本质就是访问页面。为提高查询效率&#xff0c;DBMS会占用内存作为缓冲池&#xff0c;在执行SQL之前&#xff0c;会将磁盘上的页 缓存到内存中的 缓冲池&#xff08;Buffer Pool&#xff09;后执行相关SQL语句。 …

【51单片机LCD1602显示矩阵键盘原始键值】2023-6-1

缘由https://ask.csdn.net/questions/7955623 #include "reg52.h" sbit LCD1602_RS P3^5;//RS端数据命令选择(H/L) sbit LCD1602_RW P3^6;//RW端读写选择(H/L) sbit LCD1602_EN P3^7;//EN端使能信号上升沿25ns void PanDuan1602(/*LCD1602忙判断*/) { LCD1602…