17 -- 排序算法之希尔排序

news/2024/5/15 3:59:22/文章来源:https://www.cnblogs.com/yumengqifei/p/16607533.html

 

 希尔排序算法介绍:

希尔排序是希尔于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。

写入排序法的基本思想:

希尔排序十八记录按下标的一定增量分组,对每组使用直接插入算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰号被分作一组,算法便终止。

希尔排序算法示意图:

 

 

 

 

 方法一【交换法】:

 1 import java.util.Arrays;
 2 
 3 //希尔排序算法
 4 public class ShellSort {
 5 
 6     public static void main(String[] args) {
 7         int[] arr = {8,9,1,7,2,3,5,4,6,0};
 8         shellSort(arr);
 9         loopShellSort(arr);
10     }
11     
12     public static void loopShellSort(int[] arr) {
13         int tmp = 0;
14         int count = 0;
15         for(int gap = arr.length/2; gap > 0; gap /= 2) {
16             for(int i = gap; i < arr.length; i++) {
17                 for(int j = i - gap; j >= 0; j -= gap) {
18                     if (arr[j] > arr[j+gap]) {
19                         tmp = arr[j];
20                         arr[j] = arr[j+gap];
21                         arr[j+gap] = tmp;
22                     }
23                 }
24             }
25             System.out.println("第" + (++count) + "轮:" + Arrays.toString(arr));
26         }
27     }
28     
29     public static void shellSort(int[] arr) {
30         int tmp = 0;
31         for(int i = 5; i < arr.length; i++) {
32             for(int j = i-5; j >= 0; j -= 5) { //步长为5【即相隔5个为一组】
33                 if (arr[j] > arr[j+5]) {
34                     tmp = arr[j];
35                     arr[j] = arr[j+5];
36                     arr[j+5] = tmp;
37                 }
38             }
39         }
40         System.out.println("第1轮排序后:" + Arrays.toString(arr));
41         
42         for(int i = 2; i < arr.length; i++) {
43             for(int j = i-2; j >= 0; j -= 2) { //步长为2【即相隔2个为一组】
44                 if (arr[j] > arr[j+2]) {
45                     tmp = arr[j];
46                     arr[j] = arr[j+2];
47                     arr[j+2] = tmp;
48                 }
49             }
50         }
51         System.out.println("第2轮排序后:" + Arrays.toString(arr));
52         
53         for(int i = 1; i < arr.length; i++) {
54             for(int j = i-1; j >= 0; j -= 1) { //步长为1【即相隔1个为一组】
55                 if (arr[j] > arr[j+1]) {
56                     tmp = arr[j];
57                     arr[j] = arr[j+1];
58                     arr[j+1] = tmp;
59                 }
60             }
61         }
62         System.out.println("第3轮排序后:" + Arrays.toString(arr));
63     }
64 
65 }

shellSort方法是演变希尔排序算法的过程,而loopShellSort方法是总结其规律,然后用循环实现,再次展示示例程序执行结果:

 优化:使用移位法:

 

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

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

相关文章

JAVA毕设项目京东仓库管理系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)

JAVA毕设项目京东仓库管理系统&#xff08;VueMybatisMavenMysqlsprnigSpringMVC&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&am…

好心情精神心理科医生:哪些精神类药物会影响你的睡眠?

患病后的你是否也因有这种顾虑&#xff0c;迟迟不敢吃药或选择停药呢&#xff1f; 到底哪些精神科药物会引起睡眠问题呢&#xff1f;资料显示&#xff0c;凡是提高多巴胺能和去甲肾上腺素能的药物&#xff0c;都有可能引起睡眠问题。今天&#xff0c;好心情小编带大家一起来看…

G:\r\tcga_example-master\scripts 生存分析 tcgaexample jimmy

G:\r\tcga_example-master\scripts library(survival) library(survminer)## 批量生存分析 使用 coxph 回归方法 # http://www.sthda.com/english/wiki/cox-proportional-hazards-model colnames(phe) head(phe) #event中1 表示存活&#xff08;终点事件&#xff09; #htt…

15Spring Boot整合MyBatis

MyBatis 是一个半自动化的 ORM 框架&#xff0c;所谓半自动化是指 MyBatis 只支持将数据库查出的数据映射到 POJO 实体类上&#xff0c;而实体到数据库的映射则需要我们自己编写 SQL 语句实现&#xff0c;相较于Hibernate 这种完全自动化的框架&#xff0c;Mybatis 更加灵活&am…

windows下Redis多实例部署

当存在多个项目的时候&#xff0c;需要同时部署时&#xff0c;且只有一台服务器时&#xff0c;哪么就需要部署Redis多个实例&#xff0c;原理很简单&#xff0c;多个Redis服务运行使用不同的配置及数据管理。 具体操作如下&#xff1a; 1、进入redis安装目录&#xff0c;找到…

zerotier的planet服务器(根服务器)-搭建教程

应用场景介绍: 利用阿里云服务器,搭建根服务器,把不同局域网打通,实现内网穿透,远程控制。 准备工具: 1、服务端:云服务器(有公网IP)Centos 7.62、客户端: 工控机(或者家里电脑)(Linux) ,公司电脑Windows 搭建私有化 ZeroTier步骤: 一、云服务器上安装服务操作…

python如何制作并安装自建包?

一、依赖 首先检查python是否安装了wheel、setuptools包,没有则使用pip安装pip install wheel --force-reinstallpip install setuptools --force-reinstall 二、准备文件在create_package文件夹下,制作自定义包(myPackage): 在该包下,有aa.py和bb.py两个模块, 同时该包…

win11怎么回去win10?四种方法教你!

win11系统与旧系统相比&#xff0c;在这些方面进行了重大更新&#xff1a;新的开始菜单、通知中心、重新设计的任务栏以及更加美观的圆角窗口&#xff0c;确实给用户带来了不一样的体验。然而&#xff0c;win11有时漏洞频出、BUG不断和兼容性不佳的问题&#xff0c;让很多升级w…

(附源码)springboot企业合同管理系统 毕业设计 161456

springboot企业合同管理系统 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对企业合同等问…

安装CUDA、anaconda、pytorch

文章目录前言一、CUDA安装1.查看CUDA版本2.安装CUDA2.1 下载CUDA2.2 安装CUDA2.3 测试CUDA安装成功二、anaconda安装1.anaconda下载2.anaconda环境变量配置3.测试anaconda安装成功3.anaconda常见命令操作3.1 清华镜像3.2 切换虚拟环境三、pytorch安装1.anaconda下pytorch安装2.…

YOLOV5模型转onnx并推理

YOLOV5模型转onnx并推理模型转onnx普通模型转onnxyolov5模型转onnxonnx 推理普通模型yolov5模型一、推理二、坐标转换三、非极大值抑制四、根据置信度过滤无用框五、画图六、总代码模型转onnx 普通模型转onnx 加载模型&#xff0c;需要是torch.save保存的模型指定输入输出的名…

模板建立

模板建立 步骤如果还没有建立一个组存储自己的模板,则先选择2(红框处)然后取个名字就好如果已经有组了,在自己建立的组内添加新模板1:后续快速生成使用的代码 2:对该模板的描述 3.模板代码 4.应该是为这个模版声明对应的语言(后附展示具体界面)根据需要选择语言,一般为java,也有…

JMeter详细安装教程

文章目录1 运行环境配置2 JMeter下载3 JMeter环境变量配置与启动3.1 环境变量配置3.2 启动1 运行环境配置 JMeter运行需要java环境&#xff0c;安装JMeter前需要安装配置好Java&#xff0c;参考文章Java环境变量配置详细教程 2 JMeter下载 下载地址&#xff1a;http://jmete…

新一期智能钱包系列:Louis Guthmann和 Ivo Georgiev 讨论账户抽象与智能钱包

Ambire 的 Twitter Space 第 10 集探讨了 EVM 生态系统中的互操作性和资产管理的解决方案。 &#x1f525;&#x1f525;准备好迎接第&#x1f51f;集了吗&#xff1f; 我们将对以太坊账户和智能合约进行研究&#x1f913;&#xff0c;这将会很有趣。&#x1f606; 周四凌晨 1 …

【Spring】AOP的三种方式

什么是aop AOP&#xff08;Aspect Oriented Programming&#xff09;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重要内…

SLAM第11讲

在&#xff11;&#xff11;讲中要下载DBow3库 地址&#xff1a;https://github.com/rmsalinas/DBow3 cd DBoW3 #进入源文件夹 mkdir build #新建一个编译目标文件夹 cd build #将build作为make工作路径 cmake -DUSE_CONTRIBON .. #编译上一级目录&#xff0c…

uni-app 怎么实现路由拦截

前言 随着业务的需求&#xff0c;项目需要支持H5、各类小程序以及IOS和Android&#xff0c;这就需要涉及到跨端技术&#xff0c;不然每一端都开发一套&#xff0c;人力成本和维护成本太高了。团队的技术栈主要以Vue为主&#xff0c;最终的选型是以uni-appuview2.0作为跨端技术…

Hugging Face学习

huggingface学习了解案列基础中文文本分类任务中文文本填空中文关系推断了解 Huggingface官网: link。Huggingface是一个开源社区&#xff0c;它提供给了先进的NLP模型&#xff0c;数据集以及其他的工具&#xff1a;数据集&#xff0c;数据集的下载地址&#xff1b;各种预训练…

杨氏干涉实验

摘要 杨氏干涉实验是显示光的波动特质的著名实验之一。这是当今几个量子光学实验的基础。 我们通过使用可调节狭缝宽度和狭缝距离的双狭缝&#xff0c;在VirtualLab Fusion中重现了这个著名的实验。 使用一个单点光源&#xff0c;我们检查了缝隙宽度和缝隙距离对干涉的影响&a…

什么OKR,分明是中华田园KPI

最近&#xff0c;OKR被诟病得越来越严重了&#xff1a;OKR就是啥都OK啊&#xff0c;最后累死自己就好了。这个诞生于互联网、成熟于互联网巨头&#xff0c;并普及世界的管理方法&#xff0c;却在本土化的实践中出现各种怨声哀道。 更有人吐槽的生动形象&#xff1a; OKR真的水土…