当前位置: 首页 > article >正文

40希尔排序 - 以递减间距进行插入排序

希尔排序 - 以递减间距进行插入排序040希尔排序用长距离跳跃打破速度壁垒 5W1H 发明者故事Who何人- 发明者是谁发明者唐纳德·希尔Donald L. Shell背景希尔是美国俄亥俄州通用电气公司General Electric的计算机工程师。他在设计实际的数据处理程序时敏锐地发现插入排序在处理基本有序数据时非常高效并由此提出了一种革命性的改进先用大间距让数据粗排再逐步缩小间距精排。当时的处境1959年计算机内存极为昂贵原地排序算法备受青睐。希尔在通用电气使用IBM 704计算机时需要对大量浮点数据进行排序发现普通插入排序对于较大数组过于缓慢。When何时- 什么时候发明的时间1959年发表于《ACM通讯》第2卷第7期时代背景IBM 704是当时的主流科学计算机使用磁芯存储器插入排序是当时最常用的排序算法之一算法分析尚未成熟大O记号还未广泛使用这是历史上第一个突破O(n²)壁垒的原地排序算法Where何地- 在哪里发明的地点美国俄亥俄州辛辛那提通用电气计算中心环境希尔在处理工业数据处理任务时在IBM 704上通过大量实验验证了他的想法。他的工作环境是一个工程应用导向的计算中心这促使他注重实际性能而非理论完美性。What何事- 发明了什么算法希尔排序Shell Sort又称缩小增量排序核心概念选定一个递减的间距序列gap sequence对每个间距值h将数组中间距为h的元素组成的子序列进行插入排序当h1时整个数组已基本有序插入排序极快关键增量序列Shell原始序列⌊n/2⌋, ⌊n/4⌋, …, 1简单但不优Knuth序列1, 4, 13, 40, 121, …即(3k-1)/2O(n{3/2})Hibbard序列1, 3, 7, 15, 31, …即2^k-1理论分析较好Why何因- 为什么发明要解决的问题插入排序的局限插入排序对于几乎有序的数据很快但对于随机数据是O(n²)因为每次只能将元素移动一步打破局部性限制通过大间距跳跃让元素一次能移动到距其最终位置很近的地方原地有效排序在不使用额外内存的前提下大幅提升排序速度当时的挑战理论分析困难希尔排序的时间复杂度取决于增量序列至今仍有未解问题希尔本人只能通过实验证明其有效性无法给出严格的理论保证不同增量序列的性能差异巨大难以选择动机希尔的核心洞察是插入排序的慢是因为元素只能短途移动。若能让元素先进行长距离跳跃则最终执行插入排序时每个元素只需移动很短距离总开销大幅降低。How何果- 如何实现有什么影响实现思路选择一个递减的间距序列 h_1 h_2 … h_t 1对每个间距 h_k执行 h_k-insertion-sort对间距为h_k的每个子序列做插入排序当 h_t 1 时执行普通插入排序作为最后一趟技术方案初始: [8, 3, 1, 5, 2, 7, 4, 6] n8 gap4: 对[8,2],[3,7],[1,4],[5,6]各做插入排序 → [2,3,1,5,8,7,4,6] gap2: 对[2,1,8,4],[3,5,7,6]各做插入排序 → [1,3,2,5,4,6,8,7] gap1: 普通插入排序数据已基本有序 → [1,2,3,4,5,6,7,8]历史影响希尔排序是第一个将排序突破O(n²)壁垒的原地比较排序算法激发了对增量序列的深入研究Pratt(1971)、Knuth(1973)、Sedgewick(1986)等相继提出更优序列希尔排序的最优时间复杂度至今未知是理论计算机科学的开放问题之一启发了后来的梳排序Comb Sort1980将大间距思想用于冒泡排序今天的使用嵌入式系统如uClibc的qsort实现曾使用Shell排序数据量中等1000-100000且不需稳定性时作为教学案例展示算法改进的思维过程 自然语言需求定义需求名称实现希尔排序支持Shell原始序列、Knuth序列和Hibbard序列三种增量方案功能需求用精确的中文描述Shell原始增量序列gap从n/2开始每次减半直到1输入整数数组及其长度操作对每个gap值执行gap-insertion-sort输出原地排序返回总比较次数Knuth增量序列使用序列(3^k-1)/2从不超过n/3的最大值开始每次除以3取整输入整数数组及其长度操作先计算最大gap(3^k-1)/2 n/3然后依次执行gap-insertion-sort输出原地排序Hibbard增量序列使用序列2^k-11,3,7,15,…从不超过n的最大值开始输入整数数组及其长度操作先计算最大gap2^k-1 n然后依次执行gap-insertion-sort输出原地排序约束条件原地排序空间复杂度O(1)最后一个gap必须为1确保排序正确性不稳定排序大间距跳跃可能改变相等元素顺序三种实现必须使用相同的gap-insertion-sort内核验收标准必须可验证编号测试场景自然语言描述预期结果验证方式1对[8,3,1,5,2,7,4,6]用Shell序列排序[1,2,3,4,5,6,7,8]memcmp比较结果数组2对同一数组分别用三种序列排序三种结果均正确各自memcmp验证3对1000个随机数用Knuth序列排序is_sorted返回true遍历检查4对逆序数组[10,9,…,1]用Hibbard序列排序[1,2,…,10]memcmp验证5含重复元素[5,3,5,1,5,2]排序[1,2,3,5,5,5]is_sorted检验6单元素[42]排序[42]数组内容检验7对比三种增量序列在1000个随机数上的比较次数KnuthHibbardShell通常打印比较次数验证均正确排序AI 生成提示基于以上需求和验收标准用标准C语言实现三种增量序列的希尔排序。 要求 1. 使用标准C99gcc -Wall无警告 2. 提取公共的gap_insertion_sort(arr, n, gap)辅助函数 3. shell_sort_shell/knuth/hibbard分别返回总比较次数long long 4. 包含完整错误处理n1直接返回0 5. 代码必须有详细中文注释说明每种增量序列的计算方法 6. 测试框架使用 tests_passed/tests_failed 计数器 7. main返回 tests_failed 0 ? 1 : 0 核心函数 - gap_insertion_sort(arr, n, gap) - 带间距的插入排序 - shell_sort_shell(arr, n) - Shell原始序列 - shell_sort_knuth(arr, n) - Knuth序列 (3^k-1)/2 - shell_sort_hibbard(arr, n) - Hibbard序列 2^k-1 - is_sorted(arr, n) - 有序性检验 C语言实现文件对应文件:shell_sort.c编译运行:gcc-stdc99-Wall-oshell_sort_test shell_sort.c ./shell_sort_test核心函数:gap_insertion_sort(arr, n, gap)- 带间距的插入排序内核shell_sort_shell(arr, n)- Shell原始增量(n/2)shell_sort_knuth(arr, n)- Knuth增量(3^k-1)/2shell_sort_hibbard(arr, n)- Hibbard增量(2^k-1)

相关文章:

40希尔排序 - 以递减间距进行插入排序

希尔排序 - 以递减间距进行插入排序 040希尔排序:用长距离跳跃打破速度壁垒📰 5W1H 发明者故事 Who(何人)- 发明者是谁? 发明者:唐纳德希尔(Donald L. Shell) 背景:希尔…...

NoFences:Windows桌面分区终极免费解决方案

NoFences:Windows桌面分区终极免费解决方案 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 在Windows系统中,桌面图标管理一直是用户面临的常见挑战。…...

Rusted PackFile Manager:Total War模组开发的终极解决方案,3分钟快速上手指南

Rusted PackFile Manager:Total War模组开发的终极解决方案,3分钟快速上手指南 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total …...

终极指南:如何用FFXIV TexTools模组管理器轻松定制最终幻想14外观

终极指南:如何用FFXIV TexTools模组管理器轻松定制最终幻想14外观 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI FFXIV TexTools模组管理器是《最终幻想14》玩家社区中最强大的外观定制工具&#xff…...

仅限前500名开发者获取:ElevenLabs内部情绪标注规范PDF(含惊讶语音的12维声学特征定义表+标注样例音频)

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs惊讶情绪语音的声学本质与认知基础 惊讶情绪在语音合成中并非简单提升音高或加快语速,而是涉及多维声学参数的协同调制。ElevenLabs 的情感语音模型通过微分频带能量分布、瞬态基…...

MASA模组汉化包完整教程:让Minecraft模组界面瞬间变中文的终极指南

MASA模组汉化包完整教程:让Minecraft模组界面瞬间变中文的终极指南 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Minecraft中MASA模组复杂的英文界面而头疼吗&#…...

Warcraft Helper完整指南:3步解决魔兽争霸3在Win10/Win11的兼容性问题

Warcraft Helper完整指南:3步解决魔兽争霸3在Win10/Win11的兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在W…...

终极HiveWE魔兽地图编辑器:如何用现代化工具打造专业级游戏地图

终极HiveWE魔兽地图编辑器:如何用现代化工具打造专业级游戏地图 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和繁琐的操作而烦恼吗&#xff1…...

3大创新突破:APK Installer如何重新定义Windows上的Android应用体验

3大创新突破:APK Installer如何重新定义Windows上的Android应用体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在当今跨平台应用需求日益增长的背景下…...

别再搞混了!Docker export和save到底啥区别?用busybox实战带你分清

深入解析Docker镜像与容器快照:从busybox实战看export与save的本质差异 在Docker的日常使用中,许多开发者经常对docker export和docker save这两个命令感到困惑。它们都能生成.tar文件,看似功能相似,实则针对完全不同的场景和对象…...

CefFlashBrowser完全指南:2025年畅玩Flash游戏与存档管理终极方案

CefFlashBrowser完全指南:2025年畅玩Flash游戏与存档管理终极方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 在Adobe Flash正式退出历史舞台后,无数经典网页游…...

别只会关规则!深入理解TypeScript项目里ESLint的no-unused-vars警告与ts(6133)错误的区别

深度解析TypeScript项目中ESLint与TypeScript的未使用变量检测机制 在TypeScript与React结合的项目中,开发者常常会遇到一个看似相同却本质不同的警告:变量声明后未被使用。VSCode可能会同时显示两种提示——来自TypeScript编译器的ts(6133)错误和来自ES…...

哔哩下载姬完整指南:三步快速掌握B站视频批量下载技巧

哔哩下载姬完整指南:三步快速掌握B站视频批量下载技巧 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#…...

MASA全家桶汉化包完整教程:让Minecraft模组界面彻底中文化

MASA全家桶汉化包完整教程:让Minecraft模组界面彻底中文化 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为MASA模组复杂的英文界面而烦恼吗?作为中文Minec…...

零基础转行网安:3个月学习路线+就业方向(2026最新)

零基础转行网安:3 个月学习路线 就业方向(2026 最新) 最近刷到很多小白在问: “2026 年零基础还能转行网安吗?”“没有学历、没有基础、不会代码,多久能找到工作?”“网上教程杂乱&#xff0c…...

3分钟搞定!Windows 11 LTSC系统一键恢复微软商店的完整指南 [特殊字符]

3分钟搞定!Windows 11 LTSC系统一键恢复微软商店的完整指南 🚀 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 还在为Windows …...

Linux只读挂载保护排查方法

Linux只读挂载保护排查方法本文面向具备一定 Linux 基础的技术人员,围绕只读挂载保护展开,重点讨论写入隔离、配置保护和异常诊断。在中级运维和系统管理工作中,这类主题常常与配置变更、资源状态、权限边界、自动化任务和业务影响交织在一起…...

靠谱的openai claudecode AI中转站

各位大神开发都用那些模型?最近用Trae的模型一下就降智,切换到apikeyfun.com 用了ops4.7和gpt5.5简直是降维打击,速度快,还不错!...

基于M6801SPCS的闭环步进电机控制:从PID三环到工业应用实战

1. 项目概述:当步进电机遇上闭环,工业自动化的一次精密升级在工业自动化领域,步进电机因其结构简单、控制方便、成本低廉,一直是许多点位控制、低速高精度场景的宠儿。但传统开环步进有个“阿喀琉斯之踵”——丢步。一旦负载突变或…...

合宙Air001开发板深度评测:一分钱MCU的嵌入式开发实战

1. 项目概述:当“羊毛”遇上“硬核”开发最近在电子爱好者圈子里,合宙新推出的Air001开发板成了热议的焦点。原因无他,核心的MCU芯片价格标签上赫然写着“0.01元”——你没看错,就是一分钱。这已经不是“卷”了,简直是…...

MultiFunPlayer终极指南:5分钟掌握开源设备同步软件,打造沉浸式娱乐体验

MultiFunPlayer终极指南:5分钟掌握开源设备同步软件,打造沉浸式娱乐体验 【免费下载链接】MultiFunPlayer flexible application to synchronize various devices with media playback 项目地址: https://gitcode.com/gh_mirrors/mu/MultiFunPlayer …...

Citra 3DS模拟器:在电脑上重温任天堂掌机经典的完整指南 [特殊字符]

Citra 3DS模拟器:在电脑上重温任天堂掌机经典的完整指南 🎮 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/GitHub_Trending/ci/citra 想要在Windows、macOS或Linux电脑上体验《精灵宝可梦XY》、《塞尔达传说&am…...

MetaClaw:基于MAML的元学习框架,让AI智能体快速适应新任务

1. 项目概述:当“元学习”遇上“智能体”,一个开源框架的诞生最近在智能体(Agent)和元学习(Meta-Learning)的交叉领域,发现了一个挺有意思的开源项目——MetaClaw。这个项目来自 aiming-lab&…...

GTA5线上小助手:终极免费工具让你的洛圣都之旅更精彩

GTA5线上小助手:终极免费工具让你的洛圣都之旅更精彩 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 还在为GTA5线上模式中繁琐的操作而烦恼吗?想要更轻松地管理游戏数据、快速到…...

整合ssm框架,详细讲解

今天针对 SSM(SpringSpringMVCMyBatis)框架整合展开了学习,学习内容如下:我们在进行 JavaEE 开发时,为了实现解耦和提高开发效率,通常会采用 SSM(SpringSpringMVCMyBatis)框架整合的…...

矩阵键盘原理与实战:从扫描算法到Arduino/CircuitPython驱动指南

1. 项目概述:为什么我们需要矩阵键盘? 在嵌入式项目里,给设备加几个按钮是再常见不过的需求。但如果你需要10个、12个甚至16个独立的按键呢?按照传统思路,一个按键对应一个微控制器的数字输入引脚,那你的Ar…...

自制AVR ISP批量编程器:从ZIF插座到AVRDUDE一键烧录全攻略

1. 项目概述:为什么你需要一个批量编程器?如果你玩过Arduino或者自己做过一些基于AVR单片机的小项目,那么对“烧录程序”这个步骤一定不陌生。通常,我们是用一根USB线,或者一个USBasp、USBtinyISP这样的小编程器&#…...

树莓派驱动MAX31855热电偶传感器:从SPI通信到高精度测温实践

1. 项目概述:从热电偶到Python读数在嵌入式开发、工业监控或者任何需要精确测温的项目里,热电偶(Thermocouple)往往是工程师们的首选传感器。它结构简单、皮实耐用,而且测温范围能从零下两百多度一直覆盖到上千度&…...

5分钟实现专业级3D高斯泼溅渲染:Unity场景重建终极指南

5分钟实现专业级3D高斯泼溅渲染:Unity场景重建终极指南 【免费下载链接】UnityGaussianSplatting Toy Gaussian Splatting visualization in Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityGaussianSplatting 想象一下,你花费数小时扫…...

【SRC漏洞挖掘系列】第02期:XSS与CSRF——Web世界的“偷家”艺术

上期回顾:我们扒光了目标的资产(情报收集)。本期开始,我们要对这些目标进行“物理超度”——哦不,是合法的安全测试。今天的主角是 Web 漏洞界的“哼哈二将”:XSS​ 和 CSRF。一、为什么这俩货这么重要&…...