算法学习之希尔排序

JESD204B Subclass 1的SYSREF机制 SYSREF 是一个系统级同步脉冲信号,用于对齐 JESD204B 中的 LMFC(Local Multi-Frame Clock),从而实现每次建链的延迟一致性。核心点内容说明是系统参考跨多个芯片、多通道实现精确同步控制 LMFC决定所有设备的 LMFC 对齐点仅用于 Subclass 1是 JESD204B 实现确定性延迟的前提条件一般通过时钟芯片生成推荐使用 AD9528、LMK04828,支持 JESD204 专用输出建链过程中关键作用。 阅读详情

原理

希尔排序是直接插入排序的优化,原理是对数组先进行分组,并对每个分组进行插入排序,每次分组的组数为(len/2*i),即如果长度为10,分组的组数分别为5,2,1

思路

要理解希尔排序最重要的就是要理解他是如何进行分组的,了解了如何进行分组在参考直接插入排序就会比较清晰。

  • 首先我们分组的规则是将数组每次分成(len/2*i)组

  • 如何进行分组,这里上图

  • 这是对一个长度为10的数组进行第一次分组的结果(分为5组)

    • 10个元素分为5组其元素的跨度为5,即下标分组为(0,5)、(1,6)、(2,7)、(3,8)、(4,9)

  • 第二次分组的结果(分为2组)

    • 10个元素分为2组其元素跨度为2,下标分组为(0,2,4,6,8)、(1,3,5,7,9)

  • 最后的结果

    • 10个元素分为1组其元素跨度为1,下标分组为(0,1,2,3,4,5,6,7,8,9)

  • 总结得:将元素下标为i、i+跨度、i+跨度*2...的元素分在一组内

代码

/**
     * 希尔排序,直接插入排序的优化,原理是对数组先进行分组,并对每个分组进行插入排序,每次分组为len/2
     * @param arr
     * @param len 分组跨度
     * @return
     */
    public static int[] shellSort(int arr[] , int len){
        if (len == 1){
            return arr;
        }
        int insertValue = 0 ;
        int insertIndex = 0 ;
        for (int i = len/2 ; i < arr.length ; i++){
            // 这里i的初值可以是从0开始,设置为len/2是为了跳过插入数组只有1个数的情况,即从分组数组的第二位开始(insertSort中int i = 1)
            insertValue = arr[i];
            insertIndex = i - len/2;
            while (insertIndex >= 0 && insertValue < arr[insertIndex]){
                arr[insertIndex+len/2] = arr[insertIndex];
                insertIndex -= len/2;
            }
            arr[insertIndex + len/2] = insertValue;
        }
        shellSort(arr,len/2);
        return arr;
    }
【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第9套模块A:网络构建 & (三)无线网络配置+(四)出口网络配置-命令配置 阅读详情

相关推荐

【GEE实战指南】Python本地API配置避坑与一站式环境搭建

本文详细介绍了Google Earth Engine(GEE)Python本地API的配置避坑指南与一站式环境搭建流程。通过conda创建隔离环境、账户认证关键步骤、初始化代码的正确写法以及实战测试案例,帮助开发者快速掌握GEE Python API的配置技巧,避免常见错误,提升地理空间数据分析效率。

weixin_42624889的博客 187

Java算法基础学习之希尔排序算法

前言: 大家好,上一篇博客带大家学习如何编写十大排序算法中的三大简单排序,那么今天带给大家的学习内容是十大排序算法中的希尔排序算法 1.1 希尔排序基础概念 在编写希尔排序算法之前,我们首先简单了解一下希尔排序的基本概念和排序的流程,会对算法的编写很有帮助! 1.1.1 希尔排序基本概念 希尔排序又称改进版插入排序;它是按照一定的间隔将查找到的元素进行排序,相比插入排序,将小数排在前面,所移动的次数要少很多 当间隔较大时,它移动的次数比较少,当间隔较小 (例如为1时),移动的距离又比较小,所

weixin_45301250的博客 232

3D Slicer的学习(二) 图像的分割

先对不同层级标注,然后点击Fill between slices -> Initialize -> Apply拖动层级颜色区域就会变成连续自适应的动态变化区域。如图,点击Level tracing,在图像上放置鼠标,会显示可能想要选中区域的轮廓,点击鼠标右键会将其显示为蓝色。然后点击Grow from seeds -> Initialize -> Apply,显示3D之后会自动扩展到其他位置的相同部位,从而展示整个部位。如图为copy之后,将黄色区域的颜色复制到原本的绿色区域。

tuweibazong的博客 6085

插入排序和希尔排序算法学习

在以前的学习过程只学习过冒泡排序和快速排序。自己又通过在网络的学习,记录学习一下,插入排序和希尔排序 插入排序,相关动图显示,可以帮助理解 #include &lt;stdio.h&gt; #define MAXSIZE 15 //一个用作示例的小顺序表的最大长度 #define LT(a,b) ((a)&lt;(b)) #define LQ(a,b) ((a)&...

xiaohu1996的博客 1107

MEG预处理-Brainstorm

Brainstorm下载和安装 去Brainstorm官网进行下载:打开网页后,点击左侧Download;在跳出来的界面中进行简单的注册,注册完成后可以进行下载 解压后得到“brainstorm3”的文件夹,里面包含Brainstorm工具包的所有文件,把这个文件夹放在某个路径如"E:\matlab_tools\brainstorm3"即可 同样在某个路径建立空的文件夹命名为:brainstorm_db用于工具包运行过程中自动存储生成的文件,所以这个文件中生成的数据不要手动移动删除 在Matlab中,把.

AxeChen的博客 6127

科研党必备:Python脚本批量下载DOI文献的保姆级教程(附避坑指南)

本文为科研人员提供了一份详细的Python脚本批量下载DOI文献的教程,涵盖环境配置、核心功能实现、性能优化及常见问题解决。通过自动化脚本,研究者可高效完成文献批量下载,显著提升科研工作效率,特别适合需要处理大量文献的研究团队使用。

weixin_26965807的博客 478

【算法学习】 七 希尔排序

希尔排序,插入排序的plus版本,图文并茂,方便理解

程序猿学社的博客 4592

让 PyCharm 代码“发光”:高亮插件与特效全攻略

PyCharm 作为一款强大的 Python IDE,支持多种插件让代码“发光”——无论是动态输入特效、彩虹括号,还是霓虹主题,都能让你的代码脱颖而出!进入 File → Settings → Editor → Color Scheme → Rainbow Brackets。进入 File → Settings → Appearance & Behavior → Material Theme。进入 File → Settings → Editor → Color Scheme → General。

qq_43580271的博客 3838

【算法学习】 希尔排序算法

插入排序算法存在的问题 直接插入排序在在本身数量比较少的时候情况下效率很高,对于大规模乱序数组,其效率不是很理想,因为它只会交换相邻的元素,因此元素智能一点一点的移动到目标位置。例如,如果最小的元素恰好在数组的另一端,那么就需要N-1次移动才能将它移动到争取的位置。希尔排序是插入排序的一种更高效率的实现,对插入排序进行了改进。它与插入排序的不同之处在于,它会优先比较距离较远的元素。 希尔排序基...

愿万事胜意 341

SAP_MM模块采购价格确定控制简介

SAP MM模块采购价格确定控制是采购管理中的关键功能,系统通过"价格确定日期"判断条件记录有效性并带出正确价格。文章分析了四种常见业务场景及其对应的价格确定方案:普通采购订单(创建日期)、长期合同(交货日期)、特殊业务(手动输入)和接口下单(系统传入)。详细介绍了配置方法和前台操作步骤,并提供了不同业务类型对应的推荐控制方式汇总表。通过合理设置价格确定日期控制,企业可以确保采购价格准确性,满足各种复杂业务场景下价格管理的需求,从而提高采购管理效率和成本控制能力。

我小时候很黑的博客 738

迅投miniQMT量化交易实战指南:从入门到自动化交易系统构建

迅投miniQMT量化交易实战指南摘要 本文全面介绍迅投miniQMT量化交易系统的开发流程,重点包括: 环境配置:详细说明miniQMT极简模式的安装步骤,包括xtquant库获取、Python版本要求及验证方法 行情数据模块:解析xtdata模块的核心功能,包括: 获取板块分类与股票列表 查询合约基础信息 下载历史K线数据(支持tick、分钟、日线等周期) 交易执行模块:介绍xttrader模块的交易API,涵盖: 账户连接与初始化 订单管理(下单、撤单、查询) 持仓与资产查询 实战开发:提供可直接运行

huanghm88的专栏 669

经典算法学习——希尔排序

希尔排序的实质就是分组插入排序,该方法又称为缩小增量排序。基本思想为:先将整个带排元素序列分割成若干个子序列(由相隔某个增量的元素组成),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的。因此希尔排序在时间效率上比前两种方法有较大提高。示例代码上传至:

乞力马扎罗的雪CYF的博客 3013

软解调详解

在这个示例中,生成了一个随机的比特序列,将其调制为QPSK信号,添加了高斯白噪声,然后计算了每个比特的LLR,并根据LLR的符号进行了解调判决。软解调是一种基于接收信号的概率估计进行解调的方法。与传统的硬解调相比,软解调不仅考虑了接收信号的幅度和相位信息,还利用统计特性计算每个比特为0或1的概率,从而提高了解调性能。软解调过程中涉及的主要公式包括对数似然比(LLR)的计算公式、信号的概率分布函数以及解调判决公式等。软解调的计算处理流程包括信号接收、预处理、相位估计、LLR计算、解调判决和输出等步骤。

ahah12345678的博客 1226

学习回顾算法(希尔排序算法)

希尔排序算法概述希尔排序是插入排序的一种。也称为缩小增量排序,是插入排序算法的一种更搞笑的改进版本。希尔排序把记录按下标的一定增量分组,对每组使用直接插入排序算法;随着增量逐渐减少,每组包含的关键词越来越多,当增量减到1时,整个文件恰好被分成一组。希尔排序算法原理先取一个小于n的整数d1作为第一个增量,把列表的记录全部记录分组。所有距离为d1的倍数记录放在同一个组中,先在各组内进行直接直接插入排序;

课前的博客 337

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

算法学习:希尔排序

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键...

RoiRoc的专栏 173

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

算法学习笔记之希尔排序

一、概述 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 二、需求: 排序前:{9,1,2,5,7,4,8,6,3,5} 排序后:{1,2,3,4,5,5,6,7,8,9} 三、排序原理 1.选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组; 2.对分好的每一组数据完成插入排序; 3.减少增长量,量小减为1,重复第二步操作。 增长量h的确定:...

qq_41145193的博客 278

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

希尔排序算法学习

希尔排序算法:将整个待排序列根据一定间隔分成若干个子序列,并对这些子序列进行直接插入排序,将间隔的序列为有序序列;再缩小序列之间的间隔,再次进行直接插入排序,知道间隔为1时,进行最后一次插入排序。 再开始分割进行排序时,序列中元素较少,排序较快,到最后序列间隔变小,序列中的元素变多,但由于前期进行了排序,所以序列大部分有序,排序速度仍然较快。 具体实现代码如下: import java.util.Random; public class ShellSoftTest { publi..

chenyx1012的博客 151

希尔排序 #算法学习

每日一题 Day1 兔子试毒 #每日一题 Day2 排序算法-插入排序 #每日一题 Day3 排序算法 #每日一题 Day3希尔排序数组准备默写排序算法理解扩展Hibbard增量和Sedgewick增量 希尔排序 希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因 D.L.Shell 于 1959 年提出而得名。 希尔排序是把记录按下标的一定增量分组

半本说明书 447

算法学习记录-排序——希尔排序

本文转载自:https://www.cnblogs.com/jsgnadsj/p/3458054.html 作者:jsgnadsj 转载请注明该声明。希尔排序:   直接插入排序在在本身数量比较少的时候情况下效率很高,如果待排数的数量很多,其效率不是很理想。   回想一下直接插入排序过程,排序过程中,我们可以设置一条线,左边是排好序的,右边则是一个一个等待排序, 如果最小的那个值在最...

w36680130的博客 399

【希尔排序算法学习记录】

希尔排序简单介绍,以及 java 代码演示示例

java菜鸟的博客 144

算法学习——希尔排序

希尔排序的思想就是将排序对象分为步长序列进行插入排序,步长序列的增量是递减的,那么什么是步长序列呢?简单的说就是将一个大的序列按照固定的增量分为若干个小的序列,当数字作为序列的下标时,1,3,5,7,9就是一个步长序列,仔细考虑考虑不难理解,若一个长度为10的序列,将其按照增量为5来分段,此时要进行插入排序的分别是下标为0和5,1和6,2和7,3和8,4和9的元素,话不多说,咱们直接来看代码: ...

小Gd 的博客 491

算法学习记录5 希尔排序

理解 基本和插入排序一样,就是修改了插入排序里一次需要排序元素的数量. 实现 1 package algorithm; 2 3 import java.util.Arrays; 4 5 /** 6 * 希尔排序 7 * 8 * @author jyzjyz12@163.com 9 * @since 2017年3月7日 下午3...

ajunkui4460的博客 100

【21天算法学习】希尔排序

٩(๑❛ᴗ❛๑)۶

君子慎独,不欺暗室。卑以自牧,含章可贞。 351

【算法学习】回溯算法、希尔排序和插值算法

本文介绍了三种重要算法:回溯算法、希尔排序和插值算法。回溯算法通过深度优先搜索和剪枝优化,采用"选择-递归-撤销"模式解决组合优化问题。希尔排序作为插入排序的优化,通过分组插入和逐步缩小增量实现高效排序。插值算法则包含最近邻、双线性和双三次等方法,用于基于已知数据点预测未知值。每种算法都配有核心思想、实现步骤和典型应用场景,展现了不同计算问题的解决思路。

m0_62969865的博客 852

算法学习记录-希尔排序

针对快速排序的优化,原理在快速排序前针对使数组内任意间隔为H的字数组是有序的,当H变化为1时直接为快速排序,大概的代码描述如下: public class ShellSort {     public static void sort(int[] a)     {         int N = a.length;         int H = 1;         whil

sinbadxyf的博客 146

算法学习之:希尔排序

一、冒泡排序原理: 希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 二、java代码实现: public static void ShellSort(int arr[]) { int increasement = arr.length; int i, j, k; do { // 确定分组的增量 increasement = increasement / 3 + 1; for (i = 0; i

shun12580的博客 146
上一篇: 算法学习之基数排序
下一篇: 算法学习汇总
管管儿
博客等级 码龄7年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值