排序之希尔排序

希尔排序,也被称为缩小增量排序,是一种基于插入排序的算法。它通过比较相距一定间隔的元素,来工作,然后再逐渐减小间隔,直到整个数组排序完成。这种算法的主要优点是对于部分有序的数组,其效率非常高,可以达到线性排序的效率。

步骤:

  1. 按照数组长度的一半为间隔进行分组,在组内进行插入排序,小的数值到前边,大的数值在后边
  2. 按照数组长度一半的一半为间隔继续分组,在组内继续进行插入排序
  3. 按照数组长度一半的一半的一半为间隔继续分组,在组内继续进行插入排序
  4. 直到步长为1的时候,整个数组成为一组

思路:
希尔排序,先将待排序列进行预排序,使待排序列接近有序,然后再对该序列进行一次插入排序,此时插入排序的时间复杂度为O(N), 

时间复杂度平均:O(N^1.3)
空间复杂度:O(1) 

代码实现

下面是希尔排序的Java实现:

import java.util.Arrays;
//希尔排序
public class ShellSort {public static void main(String[] args) {int[] arr = {5,7,4,2,0,3,1,6};sort(arr);System.out.println(Arrays.toString(arr));}public static void sort(int[] arr) {for(int gap = arr.length/2;gap>0;gap/=2) {for(int i = gap;i<arr.length;i++) {//j和j+gap进行交换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;}else {break;}}}}}
}

在这段代码中,我们首先定义了一个待排序的数组arr,然后调用sort方法进行排序。排序完成后,我们使用Arrays.toString方法将排序后的数组转换为字符串并打印出来。

算法分析

希尔排序的时间复杂度为O(n^2),其中n是数组的长度。这是因为在最坏的情况下,每个元素都需要与所有其他元素进行比较。然而,由于希尔排序在处理部分有序的数组时非常高效,所以它在实际应用中通常比简单的冒泡排序和选择排序要快得多。

结论

希尔排序是一种非常有效的排序算法,特别是对于部分有序的数组。虽然它的平均时间复杂度为O(n^2),但在实际应用中,由于其优秀的性能,它通常比其他更复杂的排序算法更快。

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

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

相关文章

HBase实际应用中常见的问题 解决方案

HBase 是一个分布式的、面向列的开源数据库&#xff0c;通常用于处理大规模数据。在实际应用中&#xff0c;可能会遇到一些常见问题&#xff0c;以下是一些常见问题及其解决方案&#xff1a; 性能问题&#xff1a; 问题&#xff1a;HBase 性能下降&#xff0c;读写延迟增加。…

NLP论文阅读记录 - 05 | 2023 抽象总结与提取总结:实验回顾

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 提取方法2.2 抽象方法2.3 数据集 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive vs. Extractiv…

【OSG案例详细分析与讲解】之五:【3D交互式动画】

文章目录 一、【3D交互式动画】前言 二、【3D交互式动画】实现效果

ARP协议详解

1、ARP协议的定义 地址解析协议(Address Resolution Protocol&#xff0c;ARP)&#xff1a;ARP协议可以将IPv4地址(一种逻辑地址)转换为各种网络所需的硬件地址(一种物理地址)。换句话说&#xff0c;所谓的地址解析的目标就是发现逻辑地址与物理地址的映射关系。 ARP仅用于IPv…

c++ define 用法

PS&#xff1a;凡是以 # 开头的均为预处理指令&#xff0c;预处理又叫预编译。预编译不是编译&#xff0c;而是编译前的处理。这个操作是在正式编译之前由系统自动完成的。 宏定义 宏定义分为有参和午餐&#xff0c;一般而言无参更多用constexpr代替 无参 #define 标识符 …

代币中的decimal精度代表了什么

精度的意义在于允许发送小数的代币。举例&#xff0c;一个CAT代币合约的精度为6。那么 你拥有1个CAT就意味着合约中的balance 1 * 10^6 , 转账 0.1CAT出去的话&#xff0c;就需要输入 0.1*10^6 10^5。 也就时在涉及代币时&#xff0c;查询到的余额、转账的代币数量 都和 代币…

Sqoop入门指南:安装和配置

Sqoop是一个强大的工具&#xff0c;用于在Hadoop和关系型数据库之间高效传输数据。在本篇文章中&#xff0c;将深入探讨如何安装和配置Sqoop&#xff0c;以及提供详细的示例代码。 安装Java和Hadoop 在开始安装Sqoop之前&#xff0c;首先确保已经成功安装了Java和Hadoop。Sqo…

视频转音频小小代码

前言 特定的场景下&#xff0c;人的需求往往容易变得奇特&#xff0c;比方说&#xff0c;mp4的文件&#xff0c;有时候我只想听声音&#xff0c;而不需要看内容&#xff0c;这个时候把它转换成acc更加节省存储空间&#xff0c;变成了音频带上耳机听就可以了。 那么视频怎么转音…

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑩

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应处理&#xff0c;程序根据两个输入参数iRecordNum和IType计算x的值并返回。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试&#xff0c;测试类中设计最少的测试数据满足基路…

yolov8n 瑞芯微RKNN和地平线Horizon芯片仿真测试部署,部署工程难度小、模型推理速度快

特别说明&#xff1a;参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档&#xff0c;如有侵权告知删&#xff0c;谢谢。 模型和完整仿真测试代码&#xff0c;放在github上参考链接 模型和代码。 因为之前写了几篇yolov8模型部署的博文&#xff0c;存在两个问题&…

全网首发!Yolov8_obb旋转框检测(DOTA1.0数据集)

一、YOLOv8环境搭建 &#xff08;1&#xff09;Pytorch的安装 如果你的环境没有部署请参考本人文章&#xff1a;NLP笔记&#xff08;2&#xff09;——PyTorch的详细安装_安装torchnlp-CSDN博客 &#xff08;2&#xff09;下载最新的Yolov8-obb代码&#xff1a; https://git…

909. 蛇梯棋(图的BFS)

使用广度优先搜索来遍历从1到n*n的可能的路径。 这道题可以看作一个有向图&#xff0c;每个值为x的节点指向x1点节点&#xff0c;在蛇桥处&#xff0c;是从x指向y 注意这里的x、x1、y都是值&#xff0c;可以根据值计算出对应的行列值&#xff0c;计算规则&#xff1a; 假设值…

Redis相关知识点

1.什么是Redis Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;数据库 特征&#xff1a; 1.数据间没有必然的关联关系 2.内部采用单线程机制进行工作 3.高性能&#xff0c;官方提供测试数据&#xff0c;50个…

【修图】AI修图工具

人脸替换 免费的人脸替换工具&#xff1a; Face Swap&#xff1a; https://vmodel.ai/face-swap 支持单人换脸、多人换脸 AI消除 SnapEdit https://snapedit.app/remove-object 不付费的话只能下载清晰度较低的版本 但我试了几个在线的AI消除工具&#xff0c;SnapEdit算是…

回溯算法part06 算法

回溯算法part06 算法 今日任务&#xff1a; ● 51. N皇后 ● 37. 解数独 1.leetcode 51. N皇后 https://leetcode.cn/problems/n-queens/description/ class Solution {//存储结果List<List<String>> resultnew ArrayList<>();public List<List<St…

详细分析Java中的@JsonFormat注解和@DateTimeFormat注解

目录 前言1. JsonFormat注解2. DateTimeFormat注解3. Demo3.1 无注解3.2 有注解 4. 拓展 前言 下文中涉及MybatisPlus的逻辑删除的知识&#xff0c;可看我之前这篇文章&#xff1a;详细讲解MybatisPlus实现逻辑删除 对应的Navicat设置数据库最新时间可看我这篇文章&#xff1…

MySQL、Oracle、PostgreSQL 数据库备份用的 Shell 脚本

文章目录 一、概要二、MySQL 数据库备份与还原异地备份脚本2.1 MySQL 数据库异地备份脚本2.2 MySQL 数据库的恢复 三、Oracle 数据库备份与还原脚本3.1 Oracle 数据库异地备份脚本3.2 Oracle 数据库的恢复 四、PostgreSQL 数据库异地备份与还原脚本4.1 PostgreSQL 数据库备份脚…

生活自来水厂污水处理设备需要哪些

生活自来水厂是确保我们日常用水质量安全的重要设施。在自来水的生产过程中&#xff0c;污水处理设备是不可或缺的环节。那么&#xff0c;生活自来水厂的污水处理设备都有哪些呢&#xff1f;本文将为您详细介绍。 首先&#xff0c;生活自来水厂的污水处理设备主要包括预处理设备…

第11章 GUI Page489~494 步骤三十 保存画板文件

为“保存”菜单项 MenuItemFileSave挂接事件响应函数&#xff1a; 实际运行时&#xff0c;现版TrySaveFile()函数有点儿傻&#xff0c;点击保存菜单&#xff0c;还会弹出对话框&#xff0c;问我们“要不要保存” 修改TrySaveFile()函数 函数声明修改为&#xff1a; 函数实现修…

药品不良反应智能监测系统,java药品不良反应(ADR)智能监测系统源码,基于SpringBoot+Vue+MySQL技术开发

java药品不良反应智能监测系统 系统概述&#xff1a; 基于AI技术和深度学习模型&#xff0c;系统构建ADR智能识别模型&#xff0c;实现病程记录分析&#xff0c;提取病程记录实体&#xff0c;并完成语义关系的分类识别。一方面可以根据医务人员设置的监测任务或主题&#xff0c…