数据结构 08 - 插入排序 && 希尔排序

数据结构(C语言版) 希尔排序 希尔排序: 希尔排序是在直接插入排序的基础上的改进版,它的基本思想是:先将整个待排序记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序时”,再对全体记录进行一次直接插入排序。 代码实现: 说明:本博客的代码实现贴近数据结构(C语言版) 课本代码风格,使用抽象数据类型。 项目结构 以下文件代码与直接插入排序时所用相同,为避免大量代码重复此处不再附上。 详情可参考直接插入排... 阅读详情

一、插入排序

1.基本思想:把一组序列分成有序表和无序表两部分,依次把无序表中的数插入有序表中,直到排完无序表中的所有数。

2.思路分析

(1)把列表的第一个数定为有序表中的第一个数,然后后面所有数为无序表。
(2)遍历无序列表,依次让表中的每一个数与有序表中的每一个数进行比较,然后找到合适的插入位置。

代码实现:

 public static void InsertSort(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            int insertvalue = arr[i];
            int insertindex = i - 1;
            while (insertindex >= 0 && insertvalue < arr[insertindex]){
                arr[insertindex + 1] = arr[insertindex];
                insertindex--;
            }
            arr[insertindex + 1] = insertvalue;
            System.out.println("第" + i + "轮插入后:" + Arrays.toString(arr));
        }
        System.out.println();
    }

二、希尔排序

1.基本思想

(1)由于插入排序存在一种缺陷,假设要对一组序列进行从小到大的排列。如果有个较小的数位置非常靠后,直接使用插入排序就要进行很多次的比较赋值,从而降低了效率。

(2)希尔排序则将序列中元素按照下标进行一定增量(gap)的分组,对每组使用插入排序算法,每一次循环的gap = arr.length / 2,直至gap = 0。

代码实现:

 public static void ShellSort2(int[] arr){
        
        int count = 0;//计数器:记录排序轮次
        //第一个循环:确定步长gap的值,将序列分组
        for (int gap = arr.length/2; gap > 0 ; gap/=2) {
            count++;
            //第二个循环:遍历对应gap下的每个分组的所有元素
            for (int i = gap; i < arr.length; i++){
                if(arr[i] < arr[i - gap]){
                    int j = i;
                    int temp = arr[j];
                    //第三个循环:对每个分组使用插入排序
                    while (j-gap >= 0 && temp < arr[j - gap]){
                        arr[j] = arr[j - gap];
                        j -= gap;
                    }
                    arr[j] = temp;
                }
            }
            System.out.println("第" + count + "轮排序结果:" + Arrays.toString(arr));
        }
        System.out.println("最终结果:" + Arrays.toString(arr));
    }
FPGA以太网通信实战(一):实现MDIO接口驱动,掌控PHY芯片的钥匙 本文介绍了以太网通信技术及其核心组件。首先概述了以太网的发展历程,从标准以太网(10Mbps)到万兆以太网(10Gbps)的技术演进。重点分析了以太网接口的两大核心部件:MAC控制器负责数据链路层协议处理,PHY芯片负责物理信号转换和连接管理。文章详细解读了MDIO接口规范,包括帧格式和读写时序,并以YT8531 PHY芯片为例,介绍了其寄存器配置方法。最后设计了一个FPGA实现方案,通过MDIO接口完成PHY芯片的软复位和状态监测功能,并利用LED指示灯实时显示网络连接速率。 阅读详情

相关推荐

本地部署了qwen2.5:0.8b ,对接openclaw 后,电脑卡的要死

OpenClaw 强制 16k 上下文 + 无限历史 + Agent 调度,把 0.8b 压垮。按上面配置:轻量化 + 限历史 + 驻留显存,电脑立刻不卡。

专注于技术研发行业技术主要有AI人工智能视觉识别、物联网技术、电商平台、app原生技术、微信小程序、鸿蒙语言开发、办公企业oa、ERP等,致力于做东半球最优秀的程序员 978

插入排序——3希尔排序实现

希尔排序又称缩小增量排序,这种排序方法先将整体的无序序列进行分组,设定每个组的大小为分组因子dk。分完组后,第i个和第i+dk个,i+2dk个,i+3dk个...元素为一个组。然后对这个组进行某种方式的排序,可以使用插入排序。 对每个组排完序之后,得到一个“有序程度”好一些的序列。然后缩小分组因子dk的值。再进行一次这样的排序。直到dk为1时,进行最后一次排序。 这样就将整个序列排序完毕了。 ...

weixin_34183910的博客 191

doris2.1.8连接报错ERROR 1203 (42000): Reach limit of connections解决办法

摘要:客户Doris数据库报错"ERROR 1203 (42000): Reach limit of connections"的解决过程。发现AI提供的解决方案存在错误:1)查询命令应为SHOW FRONTEND CONFIG而非show variables;2)参数名称应为qe_max_connection而非max_connections。正确解决步骤:1)用admin账户登录查看连接数限制和当前连接数;2)通过SHOW PROPERTY命令检查用户资源限制;3)针对不同情况修改参数

Brent的专栏 1762

插入排序(希尔排序)

周末休息了一天,昨天学院第五批答辩,晚上跟同学几个聚餐,聊聊大家的工作情况,深感差距之大,不过还是做好自己吧,踏踏实实走下去,今天继续开始排序。         题目:依然是对给定数组从小到大排列。         思路:插入排序包括直接插入排序和希尔排序,直接插入排序是把序列分成两段看待,第一段是有序序列,后面的是无序序列,每次从无序序列中选择第一个元素,依次与有序序列中的数字比较,并将其插

alive的专栏 427

SAP SD 顾问面试问题 consultant interview questionnaire

以下是我个人目前面试团队 SD顾问问题的小结,希望对大家有所帮助, 也可能有回答错误的地方,希望同行不吝赐教。 也希望各位顾问们讲你们遇到的一些面试问题做个跟贴,方便大家共同进步,谢谢。   面试问题清单:  一、销售订单类型影响: 可用性检查,交货类型,输出,信贷,定价,需求,报表,合作伙伴,文本,不完整日志,交货开票,订单开票,公司间开票,统计组,屏幕顺序组,参数文件...

weixin_33825683的博客 1809

(超详细)Qt入门和配置Visual Studio的Qt环境

内容写了Qt入门,创建并编写第一个Qt程序,以及配置VS编写Qt程序的环境。(超级详细)

LY549826LY549264的博客 7679

【算法知识】详解希尔排序算法

前言 已发布:【算法知识】详解选择冒泡算法【算法知识】详解选择排序算法【算法知识】详解插入排序算法当待插入元素是一个很小(当需求是从小到大排序时,从大到小排序时此处为很大)直接插入排序...

fengdu78的博客 698

activiti(六):activiti7的数据表和字段的解释

介绍activiti7的数据表和各表字段的含义,对于学习activiti7工作流引擎的运行过程很有帮助!

no problem的博客 1万+

使用Java编写希尔排序,实现从大到小和从小到大两种排序方式

实现希尔排序的方法类 package com.hcc.util; /** * 希尔排序 * @author hcc * */ public class HillSort { /** * 希尔排序:就是直接插入排序的进化版 * @param arr * @param arrLength */ public static void sortingMinToMax(...

My_zXin的博客 886

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构学习——08—排序算法(插入排序、希尔排序、快速排序)

一、插入排序(insertion sort) 将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。(抓扑克牌形式) 插入排序包含元素的比较和元素的移动。将一个数据 a 插入到已排序区间...

weixin_42118531的博客 347

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

插入排序(直接排序和希尔排序的比较)

我们学过较多的排序,排序分为:插入排序,选择排序,交换排序,归并排序这几种,这些排序在时间复杂度和空间复杂度上存在着一些差异,下面我们会对插入排序进行详细的讲解。排序的分类插入排序和希尔排序在时间复杂度和便利性方面都有一定的差异。插入排序适用于小规模数据或者已经基本有序的数据,而希尔排序适用于中等规模数据,尤其是部分有序的数据。在实际应用中,可以根据具体的需求和数据特点选择合适的排序算法。

qq_63074244的博客 1450

老版QQ原生表情gif动态

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

IDEA的使用指南

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

【数据结构】关于冒泡排序,选择排序,插入排序,希尔排序,堆排序你到底了解多少???(超详解)

这期主要讲述了对于七大排序的前五个,通过讲解思路,以及画图的方式进行思路分析,以及代码的实现。

GGBond778的博客 1590

《数据结构》希尔排序算法

是一种改进的插入排序算法,能够提高插入排序的效率。它通过将数组分成若干个子序列,对每个子序列进行插入排序,从而使得数据更加有序。希尔排序的核心思想是通过逐步减少间隔来使得数据元素逐渐接近最终排序状态。

2302_79865304的博客 1041

算法篇:插入排序与希尔排序

插入排序与希尔排序

依稀_yixy的博客 502

[数据结构与算法-08]排序算法之希尔排序

文章目录1、基本思想2、图解3、代码实现4、时间复杂度5、稳定性6、测试 1、基本思想   回顾插入排序,当待排序的序列逆序程度越高,在从有序部分找位置插入时,后移的次数明显增多,对效率有影响。   因此,希尔排序就是在简单插入排序基础上进行改进,得到更高效的版本,也成为缩小增量排序。对比简单插入排序,希尔排序对较大规模的数据或者逆序程度很高的数据都具有很高的效率。   希尔排序把待排序序列按下标...

学哥斌的博客 750

数据结构——排序(1):插入排序

这节课我们学习了插入排序,而排序好几种。敬请期待“选择排序”~

2301_81888634的博客 1266

插入排序和希尔排序

希尔排序在处理大量数据时非常有效,与其他排序算法相比性能较好。先学会插入排序有利于理解希尔排序。希尔排序通过比较相距gap间隔的元素来进行,这个过程称为预排序,各趟比较所用的距离随着gap的变动而减小,直到只比较相邻元素的最后一趟排序为止,就是当gap为1时此时就是插入排序。gap 越大,大的值更快的调到后面,小的值可以更快调到前面,越不接近有序。gap 越小,跳的越慢,但是越接近有序,当gap ==1;就是插入排序。关于gap为具体为何值没有定论,但一定要留一个gap==1;

m0_75105049的博客 546

【数据结构与算法】(12):插入排序算法:直接插入排序和希尔排序

直接插入排序思想和过程讲解,希尔排序是如何优化直接插入排序的?

更新C/C++,数据结构与算法,计算机视觉,深度学习,目标检测 999

数据结构-希尔排序

定义:希尔排序基于插入排序,冰天急啊了一些新的特性,从而大大的提高了插入排序的执行效率 插入排序的缺点:需要多次移动,加入一个很小的数据靠右端位置上,那么需将该数据排序到正确的位置上,则所有的中间数据都需要向右移动一位 希尔排序的优点:希尔排序通过加大插入排序中的元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅度的移动,当完成该间隔的排序后,希尔排序会减少数据的间隔再进行排序,...

cc098818的博客 313

java数据结构和算法——希尔排序算法(采用交换法)

一、简单插入排序存在的问题 简单的插入排序可能存在的问题,例如数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1(最小), 这样的过程是: {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入的数是较小的数时,后移的次数明显增多,对效率有影响. 二、希尔排序算法的介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也

小志的博客 720

js数据结构与算法_08_希尔排序

一、实现希尔排序 希尔排序可以说是排序算法中的一个里程碑了,打破人们对排序算法的时间复杂度只能是O(n**2)的思维禁锢; 上一节我们知道了效率比冒泡和选择高的插入排序,那有没有思考过当标记位是一个很小的元素,那岂不是要从有序队列的最后一位一直比较到最前面吗,这样效率不是很高;可不可以,减少比较次数呢?比如大的往后面靠靠,小的往前面靠靠,可以的,希尔排序就是依次为核心: 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越

masierty的博客 579

数据结构08--排序及查找

数据结构中的常见排序和查找算法。排序算法不仅在数据处理和分析中扮演着重要角色,也为后续的数据操作打下了良好的基础。而查找算法则帮助我们高效地定位和访问数据,这对于提高程序性能来说至关重要。

weixin_69902486的博客 1310

排序篇--插入排序及希尔排序

希尔排序的基本思想是将待排序的数组元素按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。对于不同规模的数据,希尔排序都能保持较好的性能。此外在希尔排序中gap的次数没有确定的答案。

2301_80148295的博客 629

数据结构——冒泡、选择、插入和希尔排序

数据结构——排序 第一篇 求点赞收藏关注!!!

2301_80401288的博客 1137
上一篇: 数据结构 07 - 冒泡排序 && 选择排序
下一篇: 数据结构 09 - 快速排序 && 归并排序
终难忘世外仙株寂寞林
博客等级 码龄6年 0粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值