news 2026/7/13 9:59:25

算法-希尔排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法-希尔排序

希尔排序 (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)\)(原地排序,仅需常数级的额外空间用于暂存元素)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 9:57:32

C++客户端自动更新系统:从架构设计到工程实现详解

1. 项目概述与核心价值做客户端开发&#xff0c;尤其是桌面端应用&#xff0c;最头疼的问题之一就是版本更新。用户可能分散在全国各地&#xff0c;甚至全球&#xff0c;你不可能指望每个用户都手动去官网下载安装包、覆盖安装。一个稳定、可靠、对用户无感的自动更新系统&…

作者头像 李华
网站建设 2026/7/13 9:56:18

Unity游戏5分钟集成自动翻译:XUnity.AutoTranslator实战指南

1. 项目概述&#xff1a;为什么需要“自动翻译”&#xff1f; 做独立游戏或者小团队开发&#xff0c;最头疼的事情之一可能就是本地化了。你花了好几个月甚至几年时间打磨玩法、优化美术&#xff0c;终于做出了一款自己满意的作品&#xff0c;结果发现海外玩家看不懂你的游戏。…

作者头像 李华
网站建设 2026/7/13 9:54:49

Windows 10专业工作站版极简一键重装方案详解

如果你正在寻找一种真正简单快捷的Windows 10专业工作站版重装方案&#xff0c;那么这个"极简一键重装"方案值得重点关注。它最大的特点就是全程无需手动设置&#xff0c;从启动到安装完成基本不需要人工干预&#xff0c;特别适合需要快速部署系统或对技术细节不太熟…

作者头像 李华