八大排序算法之希尔排序

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

核心思想: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),不稳定

相关推荐
sali-tec3 分钟前
C# 基于OpenCv的视觉工作流-章18-图像缩放
图像处理·人工智能·opencv·算法·计算机视觉
好奇龙猫12 分钟前
【大学院-筆記試験練習:线性代数和数据结构(19)】
数据结构·线性代数
2401_8414956415 分钟前
【LeetCode刷题】LRU缓存
数据结构·python·算法·leetcode·缓存·lru缓存·查找
2401_8414956416 分钟前
【数据挖掘】Apriori算法
python·算法·数据挖掘·数据集·关联规则挖掘·关联规则·频繁项集挖掘
一路往蓝-Anbo27 分钟前
第 2 篇:单例模式 (Singleton) 与 懒汉式硬件初始化
开发语言·数据结构·stm32·单片机·嵌入式硬件·链表·单例模式
疯狂的喵29 分钟前
实时信号处理库
开发语言·c++·算法
小O的算法实验室30 分钟前
2023年ESWA SCI1区TOP,地面车辆与无人机协同系统的多区域覆盖双层路径规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
啵啵鱼爱吃小猫咪34 分钟前
机器人标准DH(SDH)与改进DH(MDH)
开发语言·人工智能·python·学习·算法·机器人
pp起床40 分钟前
回溯算法 | part01
算法
iAkuya1 小时前
(leetcode)力扣100 53课程表(深搜+拓扑排序)
算法·leetcode·职场和发展