新闻详情

新闻详情

首页 / 资讯中心 / 详情

“希尔排序”是什么呢?什么原理?怎么用?有什么优势?

发布时间:2026/10/25 23:37:41来源:尧图网络
“希尔排序”是什么呢?什么原理?怎么用?有什么优势?
一、为什么会有希尔排序在希尔排序诞生之前1959年主流简单排序冒泡、选择、插入的时间复杂度均为O(n²)。计算机科学家发现了一个痛点插入排序在数据基本有序时效率极高可达O(n)但若数据完全逆序插入排序每次都要将元素从尾部移动到头部代价极大。Donald Shell 的灵感能不能先让数据“大范围地”变得大致有序最后再用插入排序收尾于是“分组跳跃式插入”的思想诞生了。希尔排序也因此被称为“缩小增量排序Diminishing Increment Sort”。二、核心原理增量 Gap 的魔法算法通过一个递减的增量序列如n/2, n/4, ..., 1来控制分组初始大间隔将相隔gap的元素划为一组。由于间隔大元素可以“跳跃”很远的位置迅速消除大量逆序对。逐步缩小gap不断缩小子序列越来越长但此时数据已大致有序。最终收尾当gap 1时就是普通的插入排序。但此时数组已经几乎有序插入排序能在线性时间内完成。三、C 代码实现经典实现使用希尔增量gap n/2, gap / 2#include iostream #include vector using namespace std; void shellSort(vectorint arr) { int n arr.size(); // 1. 初始增量 gap n/2每次减半直到 gap 1 for (int gap n / 2; gap 0; gap / 2) { // 2. 从 gap 位置开始对每个分组进行插入排序 for (int i gap; i n; i) { int temp arr[i]; // 待插入的元素 int j i; // 3. 组内插入排序比较相隔 gap 的元素 while (j gap arr[j - gap] temp) { arr[j] arr[j - gap]; // 向后移动 gap 位 j - gap; } arr[j] temp; } } }对比标准插入排序插入排序是 gap1希尔排序是把 1 换成了动态变化的 gap四、灵魂拷问为什么希尔排序有优势“优势”篇突破了 O(n²) 的历史天花板虽然最坏情况可能还是 O(n²)取决于增量但平均性能远优于冒泡/选择/插入。对于中等规模几千到几万数据希尔排序甚至能快过没有优化的快速排序常数。原地排序内存友好空间复杂度 O(1)不像归并排序需要额外数组。代码极简逻辑清晰仅需在原插入排序上套一层 gap 循环即可实现成本极低。利用“部分有序”的天性对于现实中很多“半杂乱”的数据希尔排序能快速将其修正为全局有序。五、致命短板与避坑指南面试加分项稳定性丢失因为分组跳跃交换相等元素的相对顺序会乱所以不稳定。如果需要稳定请改回插入排序。增量序列是灵魂gap n/2希尔增量是最简单的但最坏仍为 O(n²)。追求极致性能可使用Hibbard 增量2^k - 1或Sedgewick 增量可将最坏复杂度降至O(n^4/3)甚至 O(n log² n)。工程替代在 C 工程开发中面对百万级数据std::sort内省排序依然完胜希尔排序更多用于嵌入式环境或底层没有标准库的 C 环境。六、总结希尔排序是插入排序的超级强化版。它教会我们一个重要的算法设计思想先粗调宏观跳跃再精调微观插入。面试手写时只要写出 gap 循环并解释清楚“为什么最后 gap1 时效率最高”就是满分回答~资源推荐《C八股文》2026版贪心算法
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/25 3:20:41

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/25 3:43:49

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/25 4:02:17

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/25 5:03:13

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/25 3:54:32

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/25 5:32:24

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉