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

希尔排序 (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;
		}
	}
}
相关推荐
奋斗的阿狸_19869 分钟前
ESP32-S3 + ES7210 四通道麦克风录音上传方案
c语言·开发语言·fpga开发
2401_8628808225 分钟前
iMX6ULL 驱动工程搭建 + LED 灯驱动
c语言·驱动开发·嵌入式硬件
A加ITIL教练长河achotsao30 分钟前
ITIL Master 战略领导者课后系列分享:AI编程正在重新划分研发与运维的边界
算法
hahaha601632 分钟前
FPGA+ARM实现AWB的全流程
人工智能·嵌入式硬件·算法·计算机视觉·fpga开发
李洱32 分钟前
LangChain 和 LangGraph 的区别:核心原理与使用场景
算法
夏幻灵35 分钟前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
ACP广源盛1392462567338 分钟前
Type‑C 扩展坞方案选型笔记|国产 DP1.4 转 HDMI2.0 桥接芯片 GSV2201S @ACP评估
c语言·开发语言·笔记·硬件架构·硬件工程·国产芯片
沐欣工作室_lvyiyi42 分钟前
超市智能货架系统设计与实现(论文+源码)
c语言·单片机·课程设计·电子信息工程毕业设计·黑龙江工商学院·广州工商学院·成都工业学院
C++ 老炮儿的技术栈1 小时前
static的作用
c语言·c++·人工智能·单片机·c
岁月蹉跎的一杯酒1 小时前
CCM-可调颜色校正与噪声权衡
图像处理·算法·isp