尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

算法-希尔排序

算法-希尔排序
📅 发布时间:2026/7/13 10:19:48

希尔排序 (Shell Sort)

像“分组接力赛”一样,一开始步长(gap)很大,把相隔很远的元素分到一组进行插入排序,让数据能快速跨越到接近最终位置的地方(预排序);然后不断缩小步长,让数组越来越接近整体有序;最后当步长为 1 时,整个数组只需进行一次普通的插入排序就能轻松搞定。

核心代码

#include <stdio.h> // 希尔排序函数 void shellSort(int arr[], int n) { // 初始步长设为数组长度的一半,每次缩小为原来的一半,直到为1 for (int gap = n / 2; gap > 0; gap /= 2) { // 从第 gap 个元素开始,对每个子序列进行插入排序 for (int i = gap; i < n; i++) { int temp = arr[i]; // 暂存当前需要插入的元素 int j = i; // 在当前子序列中,将比 temp 大的元素向后移动 gap 个位置 // j - gap >= 0 保证不越界 while (j - gap >= 0 && arr[j - gap] > temp) { arr[j] = arr[j - gap]; j -= gap; } // 找到正确位置后,将 temp 插入 arr[j] = temp; } } } // 打印数组的辅助函数 void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { int arr[] = {64, 34, 25, 12, 22}; int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度 printf("排序前:"); printArray(arr, n); shellSort(arr, n); // 调用希尔排序 printf("排序后:"); printArray(arr, n); return 0; }

示例演示

{64, 34, 25, 12, 22}

第 1 趟:步长 gap = 2 (5/2)
目标:将相隔 2 个位置的元素分为一组进行预排序。
分组情况:
组1(下标 0, 2, 4):{64, 25, 22}
组2(下标 1, 3):{34, 12}
对组1进行插入排序:22 < 25 < 64,排序后组1变为 {22, 25, 64}。
对组2进行插入排序:12 < 34,排序后组2变为 {12, 34}。
第 1 趟结束:数组变为 [22, 12, 25, 34, 64],数据整体更有序了。

第 2 趟:步长 gap = 1 (2/2)
目标:步长缩小为 1,相当于对整个数组进行一次普通的插入排序。
处理元素 12(下标 1):12 < 22,22 往后挪,12 插入到最前面。数组变为:[12, 22, 25, 34, 64]
处理元素 25(下标 2):25 > 22,无需挪动。
处理元素 34(下标 3):34 > 25,无需挪动。
处理元素 64(下标 4):64 > 34,无需挪动。
第 2 趟结束:排序完成。
最终结果:[12, 22, 25, 34, 64]

复杂度

时间复杂度是\(O(n^{1.3})\)(平均情况,具体取决于步长序列的选取;最坏情况为\(O(n^2)\))
空间复杂度是\(O(1)\)(原地排序,仅需常数级的额外空间用于暂存元素)

相关新闻

  • Flask + ECharts 构建城市距离查询工具:3步部署与API设计
  • AutoCAD 2024 机械零件库:300张标准件图纸分类管理与快速调用指南
  • 六本重塑技术管理者认知的工程管理经典书单

最新新闻

  • 高德逆地理编码 API 参数深度解析:radius、extensions、poitype 3个关键参数实战指南
  • Flink 1.18 与 Spark 3.5 实时处理引擎对比:延迟、吞吐与容错 3 维度实测
  • Hive on Tez 调优:Map Join 自动转换的边界条件与陷阱
  • 如何快速实现网盘文件高速下载:8大平台直链下载助手完整指南
  • 2026 无锡靠谱的防水补漏公司有哪些推荐?5 家正规机构盘点,选前先查 3 项资质 - 徽顺虹
  • Wand-Enhancer:WeMod Pro功能本地解锁与增强工具完全指南

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号