八大排序算法之希尔排序

希尔排序是插入排序的进阶版本,他多次调用插入排序,在插入排序上进行了改造,使其处理无序的数据时候更快

核心思想:1.分组 2.直接插入排序:越有序越快

算法思想:

间隔式分组,利用直接插入排序让组内有序,然后缩小分组再次排序,直到组数为1,;理论基础为直接插入排序

高明之处:

我们正常分组时候是这样直接挨着分组,每3个3个分组,这样导致我们分组之后,小的数字变化不大,大的数字变化也不大,而我们希望小的数字在前面,大的数字在后面,这样可以减少我们的时间复杂度;

而我们通过这样的间隔式分组,可以实现,尽量让大数据在后面,肖书记在前面,通过5 3 1的三次分组,(注:最后一次必须是1的分组,因为我们要让所有数据有序)实现比插入排序时间复杂度低的排序

代码实现:

cpp 复制代码
//一趟希尔排序
static void Shell(int* arr, int len,int gap)//gap为组数或者(间隔)
{
	int tmp, i, j;
	for (i = gap; i < len; i+=gap)
	{
		tmp = arr[i];
		for (j = i - gap; j >= 0; j-=gap)
		{
			if (arr[j] > tmp)
			{
				arr[j + gap] = arr[j];
			}
			else
				break;
		}
		arr[j + gap] = tmp;
	}
}

void ShellSort(int* arr, int len)
{
	int drr[] = { 5,3,1 };
	for (int i = 0; i < sizeof(drr) / sizeof(drr[0]); i++)
	{
		Shell(arr, len, drr[i]);
	}
}

特点:

希尔排序时间复杂度O(n^1.3~n^1.5),空间复杂度O(1),不稳定

相关推荐
YaraMemo20 分钟前
一文带你区分全局最优解和帕累托最优解
算法·5g·信息与通信·信号处理
白夜111730 分钟前
C++(标签派发 Tag Dispatching)
开发语言·c++·笔记·算法
YaraMemo1 小时前
数学优化问题中的三大转化:多目标转化为单目标,多变量转化为单变量,有约束转化为无约束
人工智能·算法·5g·信息与通信·信号处理
Ailan_Anjuxi1 小时前
【附Python源码】使用minGPT训练自己的小型GPT语言模型
算法
QuZero1 小时前
StampedLock Mechanism
java·算法
云泽8081 小时前
二叉树高阶笔试算法题精讲(二):非递归遍历与序列构造全解析
c++·算法·面试
无限进步_2 小时前
C++ 多态机制完全解析:从虚函数重写到动态绑定原理
java·c语言·jvm·数据结构·c++·windows·后端
小O的算法实验室2 小时前
2026年ESWA,基于固定机巢的无人机输电杆塔、变电站与配电杆混合巡检任务分配与路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章60-点点距离
图像处理·人工智能·opencv·算法·计算机视觉
nlpming5 小时前
OpenCode Skills 文档
算法