十大经典排序算法之希尔排序。

希尔排序 (Shell Sort)

​ 希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是通过将待排序列表分割成若干个子列表,对每个子列表进行插入排序,然后逐步缩小子列表的间隔,直到间隔为1,最终完成整个列表的排序。

希尔排序的步骤如下:

  1. 选择一个间隔序列(Increment Sequence),即一系列增量值(例如,n/2, n/4, n/8, ..., 1),其中 n 是列表的长度。
  2. 根据选择的增量值,将列表分割成若干个子列表,每个子列表包含间隔值指定的元素。
  3. 对每个子列表分别进行插入排序,即将子列表中的元素按照插入排序的方式进行排序。
  4. 重复以上步骤,逐步缩小增量值,直到增量值为1,完成最后一次插入排序,此时整个列表已经有序。
  5. 时间复杂度取决于所选择的增量序列,最坏情况下的时间复杂度为 O(n^2),但是对于大多数增量序列,希尔排序的时间复杂度通常在 O(n^1.3) 左右。

接下来我们给出示例代码

c 复制代码
void shell_sort(int *array, int array_num)
{
	int				group;
	int				i;
	int				j;
	int				cur_data;

	printf("shell sort\n");

	for (group=array_num/2; group>0; group=group/2)
	{
		for (i = group; i < array_num; i++)
		{
			j = i;
			cur_data = array[i];
			while ( j-group>=0 && cur_data<array[j-group] )
			{
				array[j] = array[j - group];
				j = j - group;
			}
			array[j] = cur_data;
		}
	}
}
相关推荐
AI科技星9 分钟前
引电统一方程:严格推导与量纲零错误验证
人工智能·算法·机器学习·架构·学习方法
8Qi836 分钟前
LeetCode 518:零钱兑换 II(Coin Change II)—— 题解 ✅
java·算法·leetcode·动态规划·完全背包
计算机安禾37 分钟前
【算法分析与设计】第49篇:算法博弈论与机制设计
人工智能·算法·机器学习
05候补工程师1 小时前
【408 数据结构】图论核心算法(拓扑/关键路径)与二叉搜索树精髓夺分笔记
数据结构·经验分享·笔记·考研·算法·图论
AC赳赳老秦1 小时前
OpenClaw+MySQL 深度应用:自动生成建表语句、索引优化建议与数据迁移脚本
开发语言·数据库·人工智能·python·mysql·算法·openclaw
奔袭的算法工程师1 小时前
论文解读--BEV-radar:: bidirectional radar-camera fusion for 3D object detection
人工智能·算法·目标检测·计算机视觉·自动驾驶·信号处理
Kurisu5751 小时前
深度拆解:从 Read View 到 Undo Log,多版本并发控制(MVCC)的底层确定性
算法
froyoisle1 小时前
CSP 真题解析:[CSP-J 2025-T3] 异或和
c++·算法·csp·算法竞赛·信奥赛
Byte Wizard1 小时前
C语言文件操作
c语言·开发语言
迈巴赫车主1 小时前
Prim堆优化
数据结构·算法·prim