希尔排序 Java实现

【排序算法】希尔排序原理及Java实现 希尔排序也成为“缩小增量排序”,其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列“基本有序”后,最后在对所有元素进行一次直接插入排序。因此,我们要采用跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。 阅读详情

1 希尔排序原理

希尔排序也成为“缩小增量排序”,其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列“基本有序”后,最后在对所有元素进行一次直接插入排序。因此,我们要采用跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。希尔排序是对直接插入排序算法的优化和升级。 

2 时间复杂度

希尔排序是插入排序的优化,其实现也与插入排序很相似,只是在插入排序的基础上将步数进行调整,使得数据整体更加相对有序,正因为如此,希尔排序的性能和插入排序一样,受原始数据影响较大,其时间复杂度不确定,最坏时间复杂度为o(n^2) ,平均时间复杂度为O(logn*n)。我理解的希尔排序

3 实现

/**
 * 希尔排序 --优化的插入排序
 */
public class ShellSort {
    public static void sort(int[] arr) {
        // 设置步数
        for (int increament = arr.length / 2; increament > 0; increament /= 2) {
            //从最后的一组开始
            for (int i = increament; i < arr.length; i++) {
                for (int j = i; j >= increament && arr[j] < arr[j - increament]; j-=increament) {
                    swap(arr,j,j-increament);
                }
            }
        }
    }

    public static void swap(int[] arr, int a, int b) {
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }

    /**
     * 测试
     * 
     * @param args
     */
    public static void main(String[] args) {

        int[] arr = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
        ShellSort.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
            System.out.print(' ');
        }
        System.out.println();
    }
}
通讯模块_三菱IQ-R PLC串口通讯模块RJ71C24进行Modbus-RTU通讯 在日常的选型中,很多电气工程师咨询我,三菱iQ-R系列有没有Modbus通讯模块,我在这里可以肯定的回复您,这个肯定是有的;我们共有三种可以选择分别是RJ71C24、RJ71C24-R2、RJ71C24-R4。RJ71C24系列支持MC协议通信、通信协议通信、无顺序协议通信、双向协议通信全、MODBUS通信。当我帮助他们选型之后,他们在使用的时候,又是一头雾水。那么今天我抽一些时间讲解一RJ71... 阅读详情

相关推荐

Intel MKL库常用模块的C语言实现

文章目录1. 随机数生成1.1 等概率的01分布 viRngUniform1.2 (复)高斯分布 vsRngGaussian2. 向量-向量运算2.1 向量数乘与加法 cblas_caxpby2.2 向量内积 cblas_cdotu_sub2.3 向量范数 cblas_scnrm23. 矩阵-向量运算3.1 矩阵存储方案3.2 矩阵-向量乘法 cblas_cgemv4. 矩阵-矩阵运算4.1 矩阵...

月半 月半的博客 4654

Java实现希尔排序

希尔排序 private static void ShellSort(int[] arr) { int length = arr.length; int aug = length / 2; while (aug > 0) { for (int i = aug; i < length; i++) { int temp = arr[i]; int j = i - a

qq_42981579的博客 135

IP路由原理、静态路由及动态路由区分

什么是路由 路由是指导IP报文发送的路径信息。 直连路由:目的地所在网络与路由器直接相连。 间接路由:目的地所在网络与路由器非直接相连。 静态路由是由管理员手工配置而生成的路由。 动态路由路由器使用路由协议从其他路由器那里获悉的路由。

weixin_42227328的博客 5471

java希尔排序_Java实现希尔排序

希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进,是将整个无序列分割成若干小的子序列分别进行插入排序,希尔排序并不稳定。该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。一、基本思想先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2二、下面让...

weixin_32016817的博客 391

深入理解HanLP1.x,填平可能遇到的坑

提取指定数量的摘要。自定义词典为什么要单独领出来讲呢?因为在我们的业务开发中,可能分词的效果并不理想,需要定制自己的词库,索引更加常用。例如:小米su7特斯拉modelY比亚042025款6575767670908我们需要分出小米su72025款等词。我们分别看看用字典和不用字典的效果。

static_coder的博客 977

网站进行企业微信授权登录(附带代码超详细版)

企业微信的扫码登录官方文档 https://work.weixin.qq.com/api/doc/90000/90135/90988 企业微信扫码登录认证流程 上面是官方的图片,看上去比较复杂。因此我用直白简洁的语言梳理下流程。 1、首先在自己的网站上获取到企业微信登录的二维码(二维码怎么获取稍后再说,这里想象下你已经有了一个二维码) 2、你拿着手机扫描二维码,确认登录之后,页面就会自己进行重定向的跳转,跳转的url如何配置下面再讲,但是注意,这个重定向的url可以是内网地址 3、重定向到指

Gzf的博客 1万+

Java实现的希尔排序算法

一:希尔排序算法基本思想希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时...

weixin_33645586的博客 533

TripoSR: Fast 3D Object Reconstruction from a Single Image 论文阅读

模型的主要参数,如变换器的层数、三平面的维度、NeRF模型的具体细节和主要训练配置,在表1中详细说明。TripoSR的算法流程结合了先进的数据处理、模型设计和训练技术,使其能够在不到0.5秒的时间内从单张图像中快速生成详细的3D网格。总体而言,TripoSR是一个强大的3D重建工具,它在速度和质量上都表现出色,但也需要考虑到其对计算资源的需求和在处理极端复杂场景时可能遇到的挑战。:通过精心策划的训练数据集和多样化的数据渲染技术,TripoSR提高了模型的泛化能力和对真实世界图像的适应性。

Christo的博客 1946

希尔排序及Java实现

希尔排序通过分组插入排序的方式,显著提高了插入排序在处理大规模数据时的效率。它的实现相对简单,但在实际应用中表现出色。通过本文的介绍,相信你已经对希尔排序的基本原理和Java实现有了清晰的了解。在数据处理的旅程中,希尔排序如同一位睿智的老者,教会我们如何在纷繁复杂的数据中找到秩序。希望这篇文章能为你在算法学习的道路上点亮一盏明灯。

CutToTheChase的博客 499

【PG高可用】一 PostgreSQL高可用方案repmgr部署(非常详细)

repmgr安装部署

DBA之路的博客 7055

Winform从入门到精通(38)——StatusStrip(史上最全)

本文介绍StatusStrip控件的详细用法,包含所有属性和事件,绝对史上最全!

qq_34059233的博客 2759

希尔排序java实现

希尔排序的思想是使数组中任意间隔为h的元素都是有序的

wy 283

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

本文介绍了一个基于YOLOv5的飞行器目标识别系统的开发过程。系统包含数据采集与标注、模型训练、实时检测和UI界面四大模块。文章详细讲解了从环境搭建、数据标注到YOLOv5模型训练的全流程,包括如何划分数据集、配置参数和测试模型性能。同时提供了实时检测代码示例和UI界面开发思路,使读者能够快速实现一个完整的智能检测系统。该系统可应用于军事侦察、民用巡检等领域,具有较高的实用价值,适合作为计算机视觉相关的毕业设计项目。

FJN110的博客 108

希尔排序--java实现

希尔排序的java实现 希尔排序是插入排序的一种优化版本,比插入排序更高效。 原理:选定增量h并按照h将元素分为若干组,对分好的每一组都进行插入排序,然后减小增量h的值并重复上述操作,直至h=1。 比如给出乱序数组{66,32,59,13,7,21,256,1},设定h=4;过程如下: (1)按h=4对元素分组,分组完成后对每一组进行插入排序。 (2)第一轮完成后,使h的值减半,然后重复上述操作。 (3)第二轮完成后,使h的值减半,然后重复上述操作。 即最终排序结果为{1,7,13,21,32,59,

qq_45242393的博客 335

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java代码实现希尔排序_Java希尔排序算法代码实现

Java希尔排序算法代码实现时间:2017-08-30来源:华清远见JAVA学院什么是Java希尔排序算法呢?希尔排序算法实际上是一种分组插入的排序算法,又被称为缩小增量排序。今天华清Java学院小编就来和大家分享下Java希尔排序算法代码实现。Java希尔排序算法是的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组...

weixin_39622521的博客 453

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

希尔排序算法的JAVA实现

package Utils.Sort; /***希尔排序,要求待排序的数组必须实现Comparable接口*/public class ShellSort implements SortStrategy{       private int[] increment;       /**       *利用希尔排序算法对数组obj进行排序       */       public void sor

刘锡明的专栏 6097

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

希尔排序java_java排序算法实现之希尔排序

所谓希尔排序本质来说是插入排序的增强版(java算法实现之插入排序),它是一种增量式排序,在插入排序的基础上做出了一些改进。这个做出的改进简单说就是,将数组划分为gap(增量值/步长值)个小的数组,然后在这些小数组里面使用插入排序,随着gap值的缩小,这些小数组的个数也随之缩小,同时他们的元素个数变长,最终合并为一个数组完成最终排序。算法实现过程:首先,得到一个gap值,gap = arr.len...

weixin_35615591的博客 180

希尔排序——Java实现

package sort; import java.util.Arrays; /** * 希尔排序:其核心思想为将数组分为若干组,每间隔incre的元素组成一组(注意:是相隔incre,并非连续incre个),对每组进行插入排序,直至间隔减小到1排序结束 * 时间复杂度为o(n3/2) * @author:zhaidc@qq.com * @date:2022年2月26日 下午10:08:14 */ public class ShellSort { //测试方法 public stat.

qq_40097494的博客 732

希尔排序Java实现_希尔排序 java 实现详解

希尔排序算法思想它是对插入插入排序的改进搜索维基百科可知希尔排序,也称递减增量排序算法假设有这样一组数[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],我们分别以步长为5,3,1进行排序(希尔排序最后的步长一定是1)步长为5,我们可以得到如下数据,13 14 94 33 8225 59 94 65 2345 27 73 25 3910然后 按照...

weixin_39985286的博客 181

【Java】Java实现希尔排序

概述 希尔排序是一种基于插入排序的快速排序算法。如果还未掌握插入排序的可以参考我的文章:https://blog.youkuaiyun.com/weixin_45434953/article/details/104240071 对于大规模的乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端。 希尔排序为了加快速度简单地改进了插入排序,交换不相邻的元素以对数组的局部进...

weixin_45434953的博客 269

希尔排序的Java实现

基于Java实现的简单希尔排序

Youda的博客 473

Java实现希尔排序易理解

希尔排序 希尔排序是插入排序的一种,又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 稳定性 由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。 代码实现 import java.uti

L19iii的博客 408

java实现希尔排序

基本介绍 希尔排序也是一种插入排序,他是简单插入排序经过改进之后的一个更高校的版本,也成为缩小增量排序。 //希尔排序(交换式)(效率低) public static void shellSort(int[] arr) { int temp=0; int count=0; //说明:类似于插入排序,希尔排序是特殊的插入排序,将无序插入到有序序列中,只是假定有序序列为第一个步长中的数据。 //步长逐步/2 for(int gap=arr.length/2;gap>0;ga

lxk116688的博客 478
上一篇: 什么是base标签
下一篇: 插入排序 Java
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值