算法笔记--希尔排序

简介: 希尔排序是直接插入排序的改进版,对于待排序序列的不同情况效率相近。 1. 算法思想           先选取一个小于n的增量d1,把序列中所有元素分成d1个组,所有距离为d1的倍数的元素在同一组中,在各组内执行直接插入排序。


希尔排序直接插入排序的改进版,对于待排序序列的不同情况效率相近。


1. 算法思想

          先选取一个小于n的增量d1,把序列中所有元素分成d1个组,所有距离为d1的倍数的元素在同一组中,在各组内执行直接插入排序。然后选取一个更小的增量d2,重复上述分组和排序过程;继续减小增量,直至增量为1,即所有元素在同一组中直插排序。

          因此希尔排序又叫缩小增量排序法。

2. 时间复杂度

          最好情况 O(n^1.3):与增量序列的选取有关,尚未定论最好情况的复杂度是多少,目前找出最好的好像是n的1.3次方
          最坏情况 O(n^2):Mark Allen Weiss 的《Data Structures and Algorithm Analysis in C》一书中有论证

3. 空间复杂度 O(1)

          就地排序,辅助空间为常数级

4. 稳定性

          不稳定。存在不相邻元素之间的交换

5. 代码实现(C语言)

          代码中使用的增量序列是不断除2的方法,这是希尔排序最初使用的序列,效率比较低。

void ShellSort(int *A, int n)
{
	int i, j;
	int tmp;
	int d = n / 2;

	while (d)
	{
		for (i = d; i < n; ++i)
		{
			j = i;
			tmp = A[j];

			while(j >= d && tmp < A[j - d])
			{
				A[j] = A[j - d];
				j -= d;
			}

			A[j] = tmp;
		}

		d = d / 2;
	}
}


目录
相关文章
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
369 1
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
285 0
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
251 0
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
262 0
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
982 1
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
247 1
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
495 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
441 0
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
260 0
|
算法
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
❤️算法笔记❤️-(每日一刷-26、删除有序数组的重复项)
241 0

热门文章

最新文章