【数据结构--八大排序】之希尔排序

这篇具有很好参考价值的文章主要介绍了【数据结构--八大排序】之希尔排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

前言:

本篇将开始希尔排序的讲解。本篇文章适合刚开始学习希尔排序的同学,总结的很全面,整理的很清楚,希望能帮到你,加油!

一、希尔定义:

希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,其也是一种特殊的插入排序,即将简单的插入排序进行改进后的一个更加高效的版本,也称 缩小增量排序

二、希尔排序原理

希尔排序的思路是,它通过将待排序的数组分割成多个子序列来进行排序。然后逐步缩小子序列的规模,最终进行一次插入排序,从而实现将整个数组排序的目的,当被排序的对象越接近有序时,插入排序的效率越高。希尔排序利用这一特点,通过将数组变得接近有序,从而提高插入排序的效率。

三、希尔排序原理图

gap值的计算公式:gap=n/3+1;

1.gap为3:

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
三组分别进行排序,将较小值换到左边。
【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
是不是看起来就有序多了。继续缩小gap的值。

2.gap为2:

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
第一组:1,8,7
第二组:4,5,9
对两组进行排序:
【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
看起来更加有序了。继续缩小gap的值。

3.gap为1:

当gap=1时,就相当于插入排序;
【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
排序后:就是一个有序数组了。
【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

插入排序【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

四、细节剖析

我们分析一下gap=2时的具体排序过程:

图中的 tmp>end 指的是 a[tmp] 和 a[end]

第1步:i=0; a[tmp] > a[end]不做交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
i++;

第2步:i=1; a[tmp] > a[end]不做交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
i++;

第3步:i=2; a[tmp] < a[end]交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
在这里就会有一些变化了,end在比较交换完后会执行语句 end -= gap ; 所以,end会继续向前移动gap个位置,再次进行比较交换。从而看起来像是0,2,4位置为一组。

第3步:</fonti=2; a[tmp] > a[end] 不交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法
i++;

第5步:i=3; a[tmp] > a[end]不交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

第6步:i=3; a[tmp] > a[end]不交换

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

停止

i++;这里i的值为4,不满足执行条件 n - gap;退到外层循环,gap的值缩小为1;

五、代码展示:

//希尔排序
//从下标0开始,从0+gap步开始,进行插入排序,
//每次选择一个使用遍历向前寻找是否有比他小的记下位置,最后交换
void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		for (int i = 0; i < n - gap; i++)
		{
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				//不符合就向后移动,已经保存到tmp中,不用担心被覆盖
				if (tmp < a[end])
				{
					a[end+gap] = a[end];
					end -=gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
	}
}

六、测试结果

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法

七、 时间复杂度

【数据结构--八大排序】之希尔排序,数据结构与算法,数据结构,排序算法,算法文章来源地址https://www.toymoban.com/news/detail-721048.html

到了这里,关于【数据结构--八大排序】之希尔排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构与算法】十大经典排序算法-希尔排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 希尔排序是一种插入排序的改进版本,旨在解决插入排序在处理大规模数据时的效率问题。通过将数组分为多个子序列并对

    2024年02月12日
    浏览(54)
  • 数据结构与算法:插入排序&希尔排序

    假设现在你有一个有序的数组,你要把一个数据插入到数组中,保证插入后依然有序,要怎么做? 对于人来说,这个问题就像是在整理扑克牌,瞄一眼就知道应该插入什么位置。但是对于程序来说,就需要一一对比,直到找到一个位置 左边比它大,右边比它小 ,就算找到了

    2024年01月17日
    浏览(48)
  • 【数据结构与算法】八大排序

    初看这些概念可能一脸懵,但是没有关系,等下面学完几种排序之后在来看这些概念非常容易理解。 排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的

    2024年02月01日
    浏览(45)
  • 数据结构之八大排序算法

    排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 下面是常见的排序算法: 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的元素按其值的大小逐个插入到一个已经排好序的有序序列中,直到所有的

    2023年04月14日
    浏览(47)
  • 【数据结构】八大排序之简单选择排序算法

    🦄 个人主页 :修修修也 🎏 所属专栏 :数据结构 ⚙️ 操作环境 : Visual Studio 2022 目录 一.简单选择排序简介及思路 二.简单选择排序的代码实现 三.简单选择排序的优化 四.简单选择排序的时间复杂度分析 结语 简单选择排序算法(Simple Selection Sort) 是一种简单直观的 选择排序算

    2024年02月01日
    浏览(62)
  • 【数据结构与算法】:插入排序与希尔排序

    🔥 个人主页 : Quitecoder 🔥 专栏 : 数据结构与算法 欢迎大家来到初阶数据结构的最后一小节:排序 排序是一种将一组对象按照某种特定顺序重新排列的过程。在计算机科学中,排序是数据处理中非常基本且重要的操作,它可以帮助人们更有效地理解和分析数据。排序的顺序

    2024年03月18日
    浏览(29)
  • 【数据结构与算法】插入排序和希尔排序

      目录 一.插入排序  InsertSort 基本思想 动图演示  特性总结 二.希尔排序  ShellSort 基本思想 图例 特性总结 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 当插入第i(i=1)个元素

    2023年04月18日
    浏览(75)
  • 【数据结构】 常见的八大排序算法

    排序有 内部排序和外部排序 ,内部排序是数据记录在内存中进行排序,这里八大排序就是内部排序,指直接插入,希尔,选择,堆排,冒泡,快排,归并,计数。 下面让我们来共同学习这八大排序吧!🤗🤗🤗 什么是外部排序: 外排序是数据量较大,内存放不下,数据放到外

    2024年02月12日
    浏览(58)
  • 【数据结构】--八大排序算法【完整版】

    本文主要讲解代码及代码思路,涵盖八大排序的全面知识点 ———————————————— 目录 一、直接插入排序 二、希尔排序(直接插入排序的改良版) 三、选择排序(直接选择排序) 四、堆排序 五、冒泡排序 六、快速排序 1、 左右指针法 2、挖坑法: 3、前后指针

    2024年02月16日
    浏览(30)
  • 【数据结构与算法】排序算法(选择排序,冒泡排序,插入排序,希尔排序)

    基本概念这了就不浪费时间解释了,这四种都是很简单的排序方式,本专栏后续文章会出归并排序,计数排序,快速排序,堆排序,桶排序等排序算法,今天这篇文章中给出选择排序,冒泡排序,插入排序和希尔排序的实现; 如果发现文章中有错误,还请大家指出来,我会非

    2024年02月15日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包