【排序篇1】插入排序、希尔排序

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

一、插入排序

思路:
插入排序就像玩扑克牌,抽出一张牌作为比较的元素,与前面的牌依次进行比较,小于继续往前比较,大于等于停下插入到当前位置。

图示:
【排序篇1】插入排序、希尔排序,数据结构初阶,排序算法,算法,数据结构,开发语言,c++

void InsertSort(int* a, int n)
{
	//控制所有次排序
	for (int i = 0; i < n - 1; i++)
	{
		int end = i;//记录临时下标
		int tmp = a[end + 1];//比较的元素
		//一趟排序
		while (end >= 0)
		{
			if (a[end] > tmp)//非升序
			{
				a[end + 1] = a[end];//前面的覆盖后面的
			}
			else
			{
				break;//是升序跳出本次循环
			}
			--end;//下标往前移动
		}
		a[end + 1] = tmp;//指向元素的下一个元素覆盖为tmp
	}
}

注意:总共的排序次数是n-1趟,即end最多只能到倒数第二个元素,因为如果end为最后一个元素,那么end+1的位置就是越界的。

特性总结:文章来源地址https://www.toymoban.com/news/detail-798069.html

  • 数组的元素越接近有序,该排序的效率越高
  • 时间复杂度:O(N^2)
  • 空间复杂度:O(1)
  • 稳定

二、希尔排序

希尔排序与插入排序很像,单趟排序的思路基本相似,不同的是,插入排序的每次对比一个指向的元素是向前移动一个距离,希尔排序是移动gap个距离,从大到小,最后为1

【排序篇1】插入排序、希尔排序,数据结构初阶,排序算法,算法,数据结构,开发语言,c++

void ShellSort(int* a, int n)
{
	int gap = n;//先定义好初始距离
	while (gap > 1)//限定条件
	{
		gap = gap / 3 + 1;//距离缩小
		//类似插入排序,只是把1改成gap
		for (int i = 0; i < n - gap; i++)
		{
			int end = i;
			int tmp = a[end + gap];
			while (end >= 0)
			{
				if (a[end] > tmp)
				{
					a[end + gap] = a[end];
				}
				else
				{
					break;
				}
				end -= gap;
			}
			a[end + gap] = tmp;
		}
	}
}

注意:while循环的条件gap大于1并不是说gap不能为1,而是这里在前面的进入循环的时候就有可能为1了,记住gap是先缩小再使用的,进入循环时(还没有缩小)的gap是上次使用的gap

假如gap此时为2:,满足条件,进入while循环,2除3等于0,0加1等于1,下面使用的gap就是1

再进行循环的判断,如果条件不是大于1的话,而是大于等于1,那么gap为1可以进入循环,然后1除1等于1,1+1等于2,就死循环了。

特性总结:

  • 希尔排序是对直接插入排序的优化
  • 希尔排序的时间复杂度不好计算,因为gap的取值方式很多,时间复杂度暂时为:O(N ^1.3)——O(N ^2)
  • 空间复杂度:O(1)
  • 不稳定

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

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

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

相关文章

  • 数据结构——插入排序与希尔排序

    🌇个人主页:_麦麦_ 📚今日名言:喜你成疾,药石无医。——《玫瑰与鹿》         在本篇文章,我们将为小伙伴们进行排序概念的基本讲解并具体讲解其中的两种基础排序: 插入排序和希尔排序 ,希望小伙伴们能够从中有所收获!!! 1.1排序的概念 排序 :所谓排序,

    2023年04月09日
    浏览(38)
  • 【数据结构】排序(1) ——插入排序 & 希尔排序

                              目录 一. 直接插入排序  基本思想  代码实现  时间和空间复杂度  稳定性 二. 希尔排序  基本思想  代码实现      时间和空间复杂度  稳定性             把待排序的记录按其关键码值的大小依次插入到一个已经排好序的有序序列中,直到

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

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

    2024年01月17日
    浏览(57)
  • 【数据结构】直接插入排序 & 希尔排序(一)

    目录 一,排序的概念 二,直接插入排序 1,基本思想 2,基本思路 3,思路实现 三,希尔排序 1,希尔排序的特性总结: 2,思路实现: 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作; 稳定性 :假定在待排序的记录

    2024年02月08日
    浏览(40)
  • 【数据结构】排序:插入排序与希尔排序详解

    本章开始就要分享一些常用的排序方法,我们的日常生活中很多地方都要使用排序,比如电商平台可以按照你的需求进行排序,或者是你想了解大学的综合排名时    我们之前也学到过一些简单的排序比如冒泡排序,虽然他在时间复杂度上可以说是依托答辩,但是作为排序算

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

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

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

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

    2023年04月18日
    浏览(89)
  • 【数据结构】常见排序算法——常见排序介绍、插入排序、直接插入排序、希尔排序

      在计算机科学中,排序是将一组数据按照指定的顺序排列的过程。排序算法由于执行效率的不同可以分为多种不同的算法。   通常情况下,排序算法可以分为两类,即 内部排序和外部排序 。内部排序是指数据全部加载到内存中进行排序,适用于数据量较小的情况,而

    2024年02月08日
    浏览(62)
  • 数据结构进阶篇 之 【插入排序】详细讲解(直接插入排序,希尔排序)

    千万不要因为一件事不会做而失去信心,你又不是只有这一件事不会,你还有很多呢 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接插入排序的特性总结 2.1 基本思想 2.2 实现原理 2.3 代码实现 2.4希尔排序的特性总结 –❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–❀–

    2024年04月12日
    浏览(73)
  • 【数据结构与算法】直接插入排序和希尔排序

    进入了初阶数据结构的一个新的主题——排序。所谓排序,就是一串记录, 按照其中的某几个或某些的大小(一定的规则) , 递增或递减排列起来的操作 。 排序的 稳定性 :在一定的规则下,两个值相等的元素,在排序算法处理前后的相对位置是否发生变化,如果相

    2024年04月13日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包