希尔排序-----数据结构

看图轻松理解数据结构与算法系列(希尔排序) 前言 推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。 希尔排序 希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插入排序的高效版本,也称为缩小增量排序。基本思想是将待排序元素进行增量分组,然后在分组组内进行插入排序,随着... 阅读详情

一、希尔排序的基本思想        

        希尔(Shell)排序又称为缩小增量的排序,其基本思想是:把记录按下标的一定增量d分组,对每组记录直接插入排序方法进行排序,随增量的减小,所分成组包含的记录越来越多,到增量的值减少到1时,整个数据合成为一组,构成一组有序记录,则完成排序。

注意:希尔排序算法中每一趟不产生有序区,也不一定将一个元素放置在最终位置上(即不一定将一个元素归位)。另外,希尔排序与待排序数据的顺序有关,当正序时效率最高,当逆序时效率最低。

二、希尔排序的代码实现

//希尔排序
#include<stdio.h>

//函数的实现
void ShellSort(int arr[],int n){
    int i,j,gap;//gap为增量
    int tmp;
    gap = n/2;
    while(gap> 0){
        //对所有相隔gap位置的所有元素组进行排序
        for(i = gap;i<n;i++){
            tmp = arr[i];
            j = i - gap;
            while(j>= 0 && tmp<arr[j]){
                //对相隔gap位置的元素进行排序
                arr[j+gap] = arr[j];
                j = j-gap;
            }
            arr[j+gap] = tmp;
            //j = j - gap;
        }
        //减小增量
        gap = gap/2;
    }
}

int main(){
    int arr[] = {2,6,5,3,4,8,1,11,7,18};
    int n = sizeof(arr)/sizeof(arr[0]);
    int i =0 ;
    printf("arr: ");
    for(;i<n;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
    ShellSort(arr,n);
    printf("ShellSort: ");
    for(i = 0;i<n;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
}

三、检测显示


【考研】数据结构考点——希尔排序 本文内容源于对《数据结构(C语言版)》(第2版)、王道讲解学习所得心得、笔记整理和总结。插入排序的三种方法:直接插入排序、折半插入排序和希尔排序。直接插入排序可基于顺序表或链表操作,但后两种插入方法只能基于顺序存储结构。本文内容主要针对希尔排序。分析算法,并结合例子,以图文形式讲解希尔排序的过程。【考研】数据结构考点——直接插入排序_住在阳光的心里的博客-优快云博客【考研复习:数据结构】查找(不含代码篇)_住在阳光的心里的博客-优快云博客目录前言一、基本概念二、算法步骤三、算法描述。...... 阅读详情

相关推荐

别再怕DRIVER_VERIFIER_DMA_VIOLATION蓝屏:手把手教你用WinDbg分析IOMMU与驱动冲突

本文深入解析DRIVER_VERIFIER_DMA_VIOLATION蓝屏错误,从IOMMU原理到实战排错,手把手教你使用WinDbg分析驱动冲突。通过理解DMA与IOMMU的核心机制、搭建分析环境、解读DMAR表与设备拓扑,最终定位问题驱动并提供解决方案,帮助开发者和IT运维人员有效应对此类系统崩溃问题。

weixin_30298497的博客 802

[ 数据结构 -- 手撕排序算法第三篇 ] 希尔排序

手撕排序算法系列之:希尔排序。 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等。 大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort) 本篇主要来手撕希尔排序~~ 目录 1.常见的排序算法 1.1 插入排序基本思想 2.希尔排序 2.1希尔排序(缩小增量排序) 2.1.1预排序阶段 2.1.2插入排序阶段 2.2单趟希尔排序 2.2.1思路分析 3.希尔排...

优快云博客 5552

手把手教你为STM32设备生成自定义MAC地址(基于芯片ID的5种算法对比)

本文详细介绍了基于STM32芯片ID生成自定义MAC地址的5种算法,包括直接截取、异或折叠、CRC32哈希、自定义混合运算及SHA-256摘要。通过对比分析各算法的计算复杂度、唯一性及适用场景,帮助嵌入式开发者根据项目规模与资源,选择最合适的方案,确保设备MAC地址的唯一性与合规性。

weixin_29170327的博客 527

数据结构与算法之希尔排序

希尔排序概念 代码实现 时间复杂度

努力让自己发光,对的人才能迎着光而来 2万+

使用 AFL++ 对 IoT 二进制文件进行模糊测试 - 第一部分

American fuzzy lop 是一款面向安全的模糊测试器,它采用一种新型的编译时插桩和遗传算法,可以自动发现干净、有趣的测试用例,从而触发目标二进制文件中新的内部状态。这显著提高了模糊测试代码的功能覆盖率。AFL 的地址是它已经有一段时间没有更新了。虽然 AFL 仍然运行良好,但有一个新项目 AFL++,它是 AFL 的一个分支,包含许多改进和新功能。AFL++ 的地址是,其源代码位于。在本文中,我们将研究如何使用 AFL++ 对 IoT 二进制文件进行模糊测试。

技术超强的网络安全平台 1086

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 198

数据结构--希尔排序

目录希尔排序的定义 给一个序列进行希尔排序 希尔排序的算法实现 算法性能分析1.时间复杂度2.稳定性 3.适用性 知识点回顾 第一趟d可以是元素个数/2相距为4的子表 对子表进行直接插入排序(由小到大) 得到结果是 第二趟相距为2的元素为一组 相距为2的子表 对子表进行直接插入排序(由小到大) 第二趟得到结果是 第三趟d=1,相距为1的元素为子表,正好就是所有的元素,整个表已经呈现出“基本有序”,对整体在进行一次“直接插入排序” 第三趟的子表 第三趟子表排序后的结果 不稳定仅适合于顺序表,不适用

m0_61402375的博客 1199

鸿蒙OS+UniApp文件上传实战:如何解决大文件分片上传的3大坑?

本文深入探讨鸿蒙OS与UniApp结合实现大文件分片上传的实战方案,重点解决分片策略设计、网络中断处理和进度管理三大技术难题。通过鸿蒙分布式特性与UniApp跨平台能力的结合,提供动态分片调整、断点续传和跨设备进度同步等优化方案,显著提升大文件上传成功率和用户体验。

weixin_29250403的博客 474

【数据结构】排序算法---希尔排序(动图演示)

希尔排序的详细讲解,还含有动图演示

2301_80191662的博客 8607

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 327

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

数据结构之希尔排序

希尔排序实际上就是将一组数据进行分组排序(等距元素为一组进行排序),在每一组内进行直接插入排序,让后每一次减少间距,进行排序,到距离为1结束。希尔排序也可以认为直接插入排序的优化版,优化肯定要从直接插入排序的优点来想(1)在待排序序列基本有序时,直接插入排序效率会大大提高。(2)在待排元素数量较小时,直接插入排序效率也会大大提高。希尔排序就是把这两个优点给放大、利用起来。...

&volume的博客 1081

Vue - 列表拖曳排序 / 鼠标拖动改变顺序排列高效简洁组件(支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无 BUG)

Vue-高效简洁列表拖曳排序/鼠标拖动改变顺序排列组件支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无BUG列表拖曳排序插件vuedraggable拉动拽动拖动顺序改变排序js,vue.js,nuxt.js列表如何实现鼠标拖曳改变顺序排列支持滚动条内复杂数据对象带拖动效果动画排序完毕自动排列数组位置克隆Vue.Draggable官方文档教程SortableJS与vuedraggable列表拖动排序Vue拖拽组件库vuedraggable的安装与使用用户用鼠标拖动排序功能源码最好

🏆 前端领域优质创作者 4847

JAVA数据结构与算法之————希尔排序

JAVA数据结构与算法之————希尔排序 个人理解:希尔排序其实是增量不为1的冒泡排序。 代码: import java.util.Arrays; /* * 希尔排序算法的时间复杂度为O(n^1.5), 空间复杂度为O(1) * */ public class ShellSort<E extends Comparable> { private Swap<E> s ...

qq_36007633的博客 594

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Python算法与数据结构——希尔排序

希尔排序是一种分组插入排序算法。

weixin_74165584的博客 1501

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

数据结构代码——希尔排序

数据结构代码——希尔排序

qq_53250579的博客 368

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

(数据结构)希尔排序算法

(数据结构)希尔排序算法

GHY 378

数据结构-排序-希尔排序

数据结构-排序-希尔排序

qq_40731414的博客 731

【数据结构】排序——希尔排序

前言本篇博客,我们继续介绍一种排序——希尔排序,上篇博客我们说了插入排序,了解了插入排序,那希尔排序又是什么那,我们一起来看看若有问题 评论区见📝。

m0_74091744的博客 793

数据结构—排序之希尔排序

void Shellsort(SqList &L,int dt[],int t)//增量数组。cout

gegegegegegedei_的博客 230

【数据结构】希尔排序

文章摘要:希尔排序是直接插入排序的优化版本,通过分组插入和增量序列策略提升效率。核心思想是:先以较大增量分组排序,再逐步缩小增量直至1,完成最终排序。其时间复杂度约为O(n^1.5),空间复杂度为O(1),但稳定性较差。希尔排序适用于中等规模数据、嵌入式系统等场景,优点是实现简单、内存占用少;缺点是时间复杂度分析复杂、增量序列选择困难。相比快速排序和归并排序,希尔排序在特定场景下更具优势。

大雨淅淅的博客 820

数据结构,希尔排序

【代码】数据结构,希尔排序。

wqs12_的博客 142

数据结构——希尔排序(详解)

数据结构算法——希尔排序

Yui_的博客 1万+

【数据结构】冒泡、选择、插入、希尔排序的实现

本文介绍了四种基础排序算法:冒泡排序通过相邻元素比较交换将最大元素移到末尾;选择排序每次遍历选择最小/最大元素交换到起始/末尾位置;插入排序构建有序序列并逐个插入未排序元素;希尔排序是插入排序的优化,通过gap分组预排序提升效率。每种算法均包含思想描述、具体步骤和C语言实现代码,其中冒泡排序和选择排序还提供了优化版本。这些算法虽然时间复杂度较高(多为O(n²)),但作为基础排序方法,对理解更复杂算法具有重要意义。

2301_79989168的博客 1436
上一篇: atoi 函数的实现-----C语言
下一篇: netstat命令详解----网络基础
CYD、孤狼
博客等级 码龄9年 24粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值