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

数据结构-希尔排序(ShellSort)笔记

看动画理解

【数据结构】八大排序(超详解+附动图+源码)_数据结构排序-CSDN博客

一  基本思想

先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为gap的记录分在同一组内,并对每一组内的元素进行排序。

然后将gap逐渐减小重复上述分组和排序的工作。

当到达gap=1时,所有元素在统一组内排好序。

二  代码实现

import java.util.Arrays; // 导入Arrays类,用于数组操作public class Main {// 主方法,程序的入口点public static void main(String[] args) {// 初始化一个整型数组,包含一些元素int arr[] = {1, 33, 2, 645, 747, 876, -1, -12345, 9, 10};// 调用sort1方法对数组进行排序sort1(arr);// 使用Arrays.toString方法打印排序后的数组System.out.println(Arrays.toString(arr));}// 定义一个私有静态方法sort1,用于对整型数组进行排序private static void sort1(int[] arr) {// 外层循环,控制间隔gap的值for(int gap = arr.length / 2 ; gap > 0; gap /= 2){// 内层循环,从gap开始遍历数组for(int i = gap; i < arr.length; i++){// 最内层循环,用于比较和交换元素for(int j = i - gap; j >= 0; j--){// 如果当前元素比它后面gap位置的元素大,则交换它们if(arr[j] > arr[j + gap]){int temp = arr[j];arr[j] = arr[j + gap];arr[j + gap] = temp;}}}}}
}

三  希尔排序的特性总结

希尔排序是对直接插入排序的优化。
当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。
希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,这里不深究。
时间复杂度O(N^1.5)
空间复杂度O(1)
稳定性:不稳定。

相关文章:

数据结构-希尔排序(ShellSort)笔记

看动画理解 【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 一 基本思想 先选定一个整数gap&#xff0c;把待排序文件中所有记录分成gap个组&#xff0c;所有距离为gap的记录分在同一组内&#xff0c;并对每一组内的元素进行排序。 然后将gap逐渐减小重复上…...

Junit + Mockito保姆级集成测试实践

一、做好单测&#xff0c;慢即是快 对于单元测试的看法&#xff0c;业界同仁理解多有不同&#xff0c;尤其是在业务变化快速的互联网行业&#xff0c;通常的问题主要有&#xff0c;必须要做吗&#xff1f;做到多少合适&#xff1f;现在没做不也挺好的吗&#xff1f;甚至一些大…...

软件项目管理要点

一.项目管理 1.盈亏平衡分析 销售额固定成本可变成本税费利润 当利润为0的时候就是盈亏平衡点。 2.范围管理 范围定义的输入包括&#xff1a;项目章程、项目范围管理计划、组织过程资产、批准的变更申请。 3.时间管理 项目时间管理中的过程包括活动定义、活动排序、活动的资…...

ESP8266 连接 MQTT 服务器EMQX 连接MQTTX

目录 1.先用有一台自己的云服务器 2. 使用FinalShell连接阿里云云服务器ECS 3.安装宝塔 4.在云服务器打开8888端口 5.使用外网面板地址打开宝塔面板 6.安装Docker 7.下载emqx 8.打开emqxWeb 界面 9.下载MQTTX 10.EMQX加一个客户端 11.开始通信 12.加入单片机ESP8266 …...

Python中如何处理异常情况?

1、Python中如何处理异常情况&#xff1f; 在Python中&#xff0c;处理异常情况通常使用try/except语句。try语句块包含可能会引发异常的代码&#xff0c;而except语句块包含处理异常的代码。如果try块中的代码引发了异常&#xff0c;控制流将立即转到相应的except块。 以下是…...

openpnp - 在openpnp中单独测试相机

文章目录 openpnp - 在openpnp中单独测试相机概述笔记END openpnp - 在openpnp中单独测试相机 概述 底部相机的位置不合适, 重新做了零件&#xff0c;准备先确定一下相机和吸嘴的距离是多少才合适。 如果在设备上直接实验&#xff0c;那么拆装调整相机挺麻烦的。 准备直接在电…...

Spark窗口函数

1、 Spark中的窗口函数 窗口就是单纯在行后面加一个列 可以套多个窗口函数&#xff0c;但彼此之间不能相互引用&#xff0c;是独立的 窗口函数会产生shuffle over就是用来划分窗口的 (1) 分组聚合里面的函数&#xff0c;基…...

Idea、VS Code 如何安装Fitten Code插件使用

博主主页:【南鸢1.0】 本文专栏&#xff1a;JAVA 目录 ​编辑 简介 所用工具 1、Idea如何安装插件 1.idea下载插件 2.需要从外部下载然后在安装&#xff0c; 2、VS Code如何安装插件 总结 简介 Fitten Code是由非十大模型驱动的AI编程助手&#xff0c;它可以自动生成代…...

elasticsearch7.x在k8s中的部署

一、说明 二、思路 三、部署 1、建nfs服务器 2、建持久卷 3、部署elasticsearch 四、附件 ?pv.yaml内容 elasticsearch.yaml内容 一、说明 本文章内容主要的参考来源是https://www.cnblogs.com/javashop-docs/p/12410845.html&#xff0c;但参考文献中的elasticsearc…...

校园社团信息管理平台:Spring Boot技术实战指南

3系统分析 3.1可行性分析 通过对本校园社团信息管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本校园社团信息管理系统采用SSM框架&#xff0c;JAVA作…...

【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)

文章目录 概念引入理解全连接队列内核方面理解Tcp抓包方法注意事项 概念引入 我们知道&#xff0c;TCP的三次握手是由TCP协议 自动处理的&#xff0c;建立连接的过程与用户是否进行accept无关&#xff0c;accept()的作用主要是为当前连接创建一个套接字&#xff0c;用于进行后…...

太速科技-712-6U VPX飞腾处理器刀片计算机

6U VPX飞腾处理器刀片计算机 一、产品概述 该产品是一款基于国产飞腾FT-2000四核处理器或D2000八核处理器的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道&#xff0c;其中P1、P2均支持1个PCIe x16 Gen3或2个PCIe x8 Gen3或4个PCIe x4 Gen3总…...

深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)

一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中&#xff0c;TensorFlow 由 Google 开发&#xff0c;自 2015 年发布以来&#xff0c;凭借其灵活的计算图、自动微分功能以及跨平台支持等特点&#xff0c;迅速成为主流深度学习框架…...

thinkphp中命令行工具think使用,可用于快速生成控制器,模型,中间件等

在使用tp框架的时候tp内置了一个think的命令行工具&#xff0c; 这个工具可以帮助我们快速的生成控制器&#xff0c;模型&#xff0c;中间件的代码。 这个工具就和laravel中的 artisan 的作用都差不多&#xff0c;只是名称不同而已。 tp中常用的命令行工具&#xff1a; 1. 快…...

Discourse 是否支持手机注册

Discourse 能不能使用手机进行注册&#xff1f; 功能总结 简答来说&#xff0c;Discourse 不能使用手机注册&#xff0c;Discourse 也没有提供这个功能。 这个功能多是需要 SSO 来实现。 比如说华为的那个社区&#xff0c;他们自己做了一个自己的用户管理 SSO&#xff0c;然…...

软件测试学习笔记丨Flask框架-请求与响应

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…...

【C++笔记】list结构剖析及其模拟实现

【C笔记】list结构剖析及其模拟实现 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】list结构剖析及其模拟实现前言一 .list的结构及其介绍1.1list的结构1.2list的使用1.3迭代器划分 二.list的模拟实现2.1 list结构…...

C#进阶1

C#进阶1 本文章主要介绍C#的进阶知识&#xff0c;如反射&#xff0c;特性.... 参考视频链接 原码 文章目录 C#进阶1反射步骤泛型反射调用方法 获取属性 特性特性的定义步骤扩展枚举练习 反射 在 C# 中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&a…...

PHP如何对输出进行转义

在PHP中&#xff0c;对输出进行转义是为了防止跨站脚本攻击&#xff08;XSS&#xff09;和其他安全问题。PHP提供了多种函数来对输出进行转义&#xff0c;这些函数根据输出的上下文&#xff08;如HTML、JavaScript、URL等&#xff09;而有所不同。以下是一些常用的转义函数及其…...

Windows 10 安装Docker踩过的坑和解决-31/10/2024

目录 环境版本 一、Docker Desktop双击启动没反应&#xff0c;open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、检测Docker是否可以正常使用…...

在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在OpenClaw中集成Taotoken实现多模型Agent工作流的详细步骤 对于使用OpenClaw构建AI Agent的开发者而言&#xff0c;能够灵活调用不…...

守护进程Guardian:轻量级进程保活与高可用架构实践

1. 项目概述&#xff1a;一个守护进程的诞生与使命在分布式系统和微服务架构大行其道的今天&#xff0c;服务的稳定性与可靠性成为了悬在每个开发者头顶的达摩克利斯之剑。服务挂了怎么办&#xff1f;进程意外退出如何自动恢复&#xff1f;配置热更新如何无感生效&#xff1f;这…...

AI文档智能审查:从NLP原理到企业级部署实战

1. 项目概述&#xff1a;文档的“哨兵”与智能守护者在信息爆炸的时代&#xff0c;我们每天都要与海量的文档打交道——从一份关键的商业合同、一份严谨的学术论文&#xff0c;到一份复杂的项目需求说明书。这些文档不仅是信息的载体&#xff0c;更是决策的依据、合作的基石。然…...

超越‘点亮出图’:深入Sensor AE增益配置的三种模式与实战验证(以SC230AI/OV08A10/IMX335为例)

超越“点亮出图”&#xff1a;深入Sensor AE增益配置的三种模式与实战验证 在嵌入式Camera开发领域&#xff0c;成功点亮Sensor并输出图像仅仅是万里长征的第一步。真正的挑战往往出现在图像质量调优阶段&#xff0c;尤其是自动曝光&#xff08;AE&#xff09;与增益配置这一专…...

MacOS Telegram语音实时转译:本地化音频捕获与离线语音识别实践

1. 项目概述&#xff1a;一个为MacOS打造的Telegram语音实时转译工具如果你和我一样&#xff0c;经常在Telegram上参与多语言群组讨论&#xff0c;或者需要处理来自不同地区的语音消息&#xff0c;那么语言障碍绝对是一个头疼的问题。想象一下&#xff0c;你收到一条长达一分钟…...

利用CircuitPython内置传感器实现CPU温度监控与本地日志记录

1. 项目概述&#xff1a;从芯片温度到数据洞察 在嵌入式项目里&#xff0c;给设备“把脉”是基本功。CPU温度&#xff0c;这个看似简单的数据点&#xff0c;其实是窥探硬件运行状态的绝佳窗口。它不仅能告诉你芯片是不是在“发烧”&#xff0c;更能间接反映环境变化、负载情况&…...

3大高级功能揭秘:用Python玩转B站API的终极指南

3大高级功能揭秘&#xff1a;用Python玩转B站API的终极指南 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址&#xff1a;https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mirrors/bi…...

基于CircuitPython与BLE的智能振动腕带:从硬件选型到代码实现

1. 项目概述&#xff1a;打造你的智能触觉腕上伴侣如果你和我一样&#xff0c;经常被淹没在手机通知的海洋里&#xff0c;或者在专注工作时完全忘记了时间&#xff0c;那么这个项目可能就是为你量身定做的。今天&#xff0c;我们来动手制作一个基于CircuitPython和蓝牙低功耗&a…...

从动画原理到嵌入式实现:赋予机器人生命感的设计与工程实践

1. 项目概述&#xff1a;当技术遇见灵魂在数字世界和物理世界的交汇处&#xff0c;我们总在尝试创造一些能与我们对话、甚至能触动我们内心的存在。无论是屏幕里那个让你牵挂的动画角色&#xff0c;还是面前这个试图与你眼神交流的服务机器人&#xff0c;一个核心的挑战始终横亘…...

告别Arduino IDE:在Visual Studio Code中搭建高效Arduino开发环境

1. 为什么选择VS Code开发Arduino项目 第一次接触Arduino开发时&#xff0c;大多数人都是从官方Arduino IDE开始的。这个简单的开发环境确实能快速上手&#xff0c;但随着项目复杂度增加&#xff0c;它的局限性就越来越明显&#xff1a;代码补全功能弱、项目管理混乱、调试工具…...