Java排序算法之希尔排序

news2024/11/24 11:40:13

希尔排序(Shell Sort)又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。它的基本思想是:首先将整个数组按照一定的间隔分成若干个子序列,然后对每个子序列分别进行插入排序,减小间隔,再进行排序,直至间隔减至1。该算法主要分为以下几个步骤:

  1. 先确定一个增量(间隙)序列,通常以数组长度的一半作为初始增量,不断缩小增量的值,直到为1为止。

  2. 以增量序列中的每个值作为间隔,将待排序元素分成若干个子序列,分别进行插入排序。

  3. 缩小增量,重复第二步操作,直到增量等于1。

希尔排序的时间复杂度为O(nlogn),相对于直接插入排序算法的O(n^2)要快得多,尤其是对于大规模数据的排序。

希尔排序是插入排序的一种改进和升级版本,其原理是将待排序的序列分成若干组,对每组进行插入排序,并逐步增加每组的元素数量,最终完成对整个序列的排序。下面是Java实现希尔排序的代码示例:

public class ShellSort {
    public static void shellSort(int[] arr) {
        int len = arr.length;
        int gap = len / 2;
        while (gap > 0) {
            for (int i = gap; i < len; i++) {
                int cur = arr[i];
                int preIndex = i - gap;
                while (preIndex >= 0 && arr[preIndex] > cur) {
                    arr[preIndex + gap] = arr[preIndex];
                    preIndex -= gap;
                }
                arr[preIndex + gap] = cur;
            }
            gap /= 2;
        }
    }

    public static void main(String[] args) {
        int[] arr = { 4, 6, 8, 1, 3, 5, 9, 2, 7 };
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

在这个示例中,我们首先定义了shellSort方法,它接受一个整数数组作为输入。我们首先获取该数组的长度,并将其折半作为间隔长度。然后,我们使用while循环,通过逐渐减小间隔数来逐步增加每组的元素数量。在for循环中,我们使用插入排序方法对每组进行排序。最后,我们将间隔长度除以2,然后继续进行排序,直到间隔长度为1。

在main方法中,我们使用示例数组调用shellSort方法,然后使用Arrays.toString方法打印排序后的数组。

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

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

相关文章

异步注解@Async失效的原因

在方法上加上Async注解&#xff0c;然后去启动类加上EnableAsync启动注解开启异步Async失效的原因 1、注解Async的方法不是public方法 2、注解Async的返回值只能为void或者Future 3、注解Async方法使用static修饰也会失效 4、spring无法扫描到异步类&#xff0c;没加注解Async …

AI大模型低成本快速定制法宝:RAG和向量数据库

文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域&#xff0c;最受关注的毋庸置疑是大模型。然而&#xff0c;高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下&#xff0c;向量数据库凭借其独特…

【yolov5报错解决】ModuleNotFoundError: No module named‘ultralytics.yolo‘

今天跑yolov5遇见一个报错&#xff0c;具体内容如下&#xff1a; 上面显示我没有ultralytics.yolo这个模块&#xff0c;但是我已经安装了ultralytics&#xff0c;同时&#xff0c;我也尝试了网上的方法pip install ultralytics.yolo&#xff0c;但是仍然得不到解决&#xff0c…

ai语音电销机器人电销行业要怎么降低封号率?

工信部对电话营销电话的管控越来越严格&#xff0c;企业电销行业的发展受到了很多限制&#xff0c;因为电话销售人员在进行销售工作的时候&#xff0c;经常会因为各种原因触发封号机制&#xff0c;导致手机卡号被封&#xff0c;那企业电销行业要怎么降低封号率&#xff1f; 很多…

图像格式导致halcon读取失败

图像格式&#xff1a; JPEG (jpg)&#xff0c;文件头&#xff1a;FF D8 FF PNG (png)&#xff0c;文件头&#xff1a;89 50 4E 47 GIF (gif)&#xff0c;文件头&#xff1a;47 49 46 38 Windows Bitmap (bmp)&#xff0c;文件头&#xff1a;42 4D 打开软件“notepad”使用16进…

win11无损关闭系统更新

1、窗口键R&#xff0c;打开运行窗口&#xff0c;输入regedit。 2、打开地址&#xff1a;计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 3、新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名“FlightSettingsMaxPauseDays” 4、…

正则匹配去除HTMl标签

正则匹配去除HTMl标签 案例&#xff1a;如在textarea中去除标签 操作方法 val.replace(/<[^>]>/g, ‘’))

基于SSM的校园停车场管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Mysql执行报错:[Err] 1292 - Truncated incorrect DOUBLE value:***

MySQL执行语句抛出异常&#xff1a; 上面错误提示概是下面几种情况&#xff1a; 数据类型不匹配&#xff1a;在进行数值比较或运算时&#xff0c;数据类型可能不匹配。例如&#xff0c;将一个字符串值与一个 DOUBLE 类型的列进行比较或运算&#xff0c;或者将一个非数字字符串…

Qt QWebSocket实现JS调用C++

目录 前言1、QWebChannel如何与网页通信2、QWebSocketQWebChannel与网页通信2.1 WebSocketTransport2.2 WebSocketClientWrapper2.3 初始化WebSocket服务器2.4 前端网页代码修改 总结 前言 本篇主要介绍实现JS调用C的另一种方式&#xff0c;即QWebSocketQWebChannel。与之前的…

论文阅读:YOLOV: Making Still Image Object Detectors Great at Video Object Detection

发表时间&#xff1a;2023年3月5日 论文地址&#xff1a;https://arxiv.org/abs/2208.09686 项目地址&#xff1a;https://github.com/YuHengsss/YOLOV 视频物体检测&#xff08;VID&#xff09;具有挑战性&#xff0c;因为物体外观的高度变化以及一些帧的不同恶化。有利的信息…

韦东山linux驱动开发学习【常更】

1.linux目录简单介绍 2.直接运行需要在$path路径下

cmake简单使用

简介 理论上&#xff0c;任意一个C程序都可以用g来编译。 但当程序规模越来越大时&#xff0c;一个工程可能有许多个文件夹和源文件&#xff0c;这时输入的编译命令将越来越长。通常&#xff0c;一个小型C项目可能含有十几个类&#xff0c;各类间还存在着复杂的依赖关系。其中…

Unity优化(1)——合并Mesh

在某些移动端项目中&#xff0c;对于DrawCall的要求是很严格的&#xff0c;我们一般查看DrawCall可以通过Statistics里面的Batches进行查看&#xff0c;一般移动设备的Batches要控制在200左右比较合适&#xff0c;所以降低Batches是很重要的。 我们常常会遇到一个物体下挂载很多…

【观察】OpenHarmony:技术先进“创新局”,持续创新“谋新篇”

毫无疑问&#xff0c;开源作为今天整个软件产业的创新“原动力”&#xff0c;目前在软件产业发展中的重要性愈加凸显。根据Linux基金会的统计&#xff0c;现在全球软件产业中有70%以上的代码来源于开源软件。 从这个角度来看&#xff0c;开源技术已逐渐成为推动企业数字化转型和…

任正非说:10%的特殊场景就像牛在路上,谁也不知道它会在哪拉屎

你好&#xff01;这是华研荟【任正非说】系列的第40篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 一、我们要建立核心生产能力&#xff0c;否则我们对供应链理解不深&#xff0c;供应链不能打通。我们之所以管道系统做得好&am…

【LeetCode刷题笔记】二叉树(三)

701. 二叉搜索树中的插入操作 解题思路: 1. 模拟 ,如果 根节点为空 ,就用 插入值创建根节点 直接返回。否则, cur 从 根节点 开始,比较 当前节点的值和插入值的大小关系 : 1)如果 插入值 < cur ,就

路由器ipsec|vpn实验分析

AR1 和 AR2代表两个公司的出口&#xff0c;R2模拟互联&#xff0c;两个公司通信&#xff0c;通过ipsec vpn 加密隧道进行业务通信 切记&#xff1a;ipsec 路由器一定用AR系列&#xff0c;千万别用R&#xff0c;否则会给你惊喜 R2只有接口配ip&#xff0c;无任何配置&#xff…

手机数据恢复应用程序有哪些?手机数据恢复免费软件排名TOP 9

一些免费的手机数据恢复应用程序和软件有付费版本。 如果您想要高功能&#xff0c;请选择付费版本&#xff0c;如果您不想要那么多功能&#xff0c;或者如果您目前不需要它&#xff0c;请选择免费版本。 手机数据恢复免费软件排名TOP 9 ​1. 奇客数据恢复 ​奇客数据恢复是一款…

一文读懂GPTs的构建与玩法(GPTs保姆级教程)

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结&#xff0c;包含但不限于技术领域。欢迎大家一起交流学习&#x1f4aa; 大家好&#xff0c;我是Rocky。 本文将从“什么是GPTs”&#xff0c;“GPTs搭建流程”&am…