【数据结构】初步了解排序

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

【数据结构】初步了解排序

  Yan-英杰的主页

悟已往之不谏 知来者之可追  

C++程序员,2024届电子信息研究生


目录

1.排序的概念及其运用

        1.1排序的概念

        

 2.常见排序算法的实现

        2.1插入排序

        2.2希尔排序

               问题:gap是多少合适?


1.排序的概念及其运用

        1.1排序的概念

        

        排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排

列起来的操作。

        

        稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这

些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍

在r[j]之前,则称这种排 序算法是稳定的;否则称为不稳定的。

        

        内部排序:数据元素全部放在内存中的排序。

        

        外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动

数据的排序。

        

 2.常见排序算法的实现

        

        2.1插入排序

                        思路:

                        

                把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列

                其实和摸牌的过程是一样的,两个变量之间进行比较,调换位置,根据循环,不断的进

行比较,升序情况下:如果前面一个变量的大于后一个变量,则直接进行交换位置,再和前面的位

置进行比较,知道位置到-1,则不再进行比较

                【数据结构】初步了解排序

                        代码实现:

                        

                                

void InsertSort(int* a, int n)
{
	for (int i = 1; i < n; i++)
	{
		int end = i - 1;
		int tmp = a[i];

		while (end >= 0)
		{
			if (a[end] > tmp)
			{

				a[end + 1] = a[end];
				end--;
			}
			else
			{
				break;
			}
		
		}
		a[end + 1] = tmp;
	}
}

直接插入排序的特性总结:

1. 元素集合越接近有序,直接插入排序算法的时间效率越高

2. 时间复杂度:O(N^2)

3. 空间复杂度:O(1),它是一种稳定的排序算法

4. 稳定性:稳定

        2.2希尔排序

                概念:

                        

        希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文

件中所有记录分成个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。

然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序

                

                思路:

                以gap距离大小为一组进行比较,我们对其进行排序,之后不断缩小,gap的距离

再次进行排序,随着gap的减小,最后gap缩短为1,排序即可完成

                

                【数据结构】初步了解排序

               问题:gap是多少合适?

                gap越大,跳的越快,越不接近有序,但是排序的速度更快,gap越小跳的越慢,

但是越接近有序,实际当中其界定应该是变化的

        

        

void ShellSort(int* a, int n)
{
	int gap = n;
	while (gap > 1)
	{
		gap /= 2;
		for (int i = 0; i < n-gap; i++)
		{
			int end = i;
			int tmp = a[i+gap];

			while (end >= 0)
			{
				if ( tmp < a[end] )
				{
					a[end + gap] = a[end];
					end -= gap;
				}
				else
				{
					break;
				}
			}
			a[end + gap] = tmp;
		}
		PrintArry(a,n);
	}
	

}

希尔排序的特性总结:

1. 希尔排序是对直接插入排序的优化。

2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的文章来源地址https://www.toymoban.com/news/detail-502475.html

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

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

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

相关文章

  • 【数据结构】---堆排序+TOP-K问题(了解游戏排行底层原理)

    👧个人主页:@小沈熬夜秃头中୧⍤⃝❅ 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:数据结构 🔑本章内容:堆排序+TOP-K问题 送给各位💌:日落跌入昭昭星野 人间忽晚 山河以秋 记得 评论📝 +点赞👍 +收藏😽 +关注💞哦~ 提示:以下是本篇文章正文内容,下面

    2024年02月06日
    浏览(33)
  • 对数据结构的初步认识

    牛牛开始更新 数据结构 的知识了.本专栏后续会分享用c语言实现 顺序表 , 链表 , 二叉树 , 栈 和 队列 , 排序 算法等相关知识,欢迎友友们互相学习,可以私信互相讨论哦! 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇

    2024年02月01日
    浏览(43)
  • 【开卷数据结构 】指针的初步认识

    说到指针,想必大家都不陌生,指针的最大特点就是难以理解,它是编程中很基础也是很重要的概念,指针可以有效的实现像树,链表这类高级的数据结构。 在了解指针是什么之前,我们需要先了解什么是计算机的内存,什么是地址。 内存: 计算机内存大部分时候指的是随

    2023年04月16日
    浏览(34)
  • 数据结构对链表的初步认识(一)

    已经两天没有更新了,今天就写一篇数据结构的链表吧,巩固自己也传授知识,不知道各位是否感兴趣看看这一篇有关联表的文章。 目录 链表的概念与结构  单向链表的实现 链表各个功能函数 首先我在一周前发布了一篇有关顺序表的文章,其中我们通过简单的介绍和代码实

    2024年02月19日
    浏览(32)
  • 【java数据结构】泛型的初步认识(2)

    hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥💥,如果发现这篇文章有问题的话,欢迎各位评论留言指正,大家一起加油!一起chin up!👍👍  💥 个人主页: E绵绵的博客 💥 所属专栏: JAVA知识点专栏

    2024年04月26日
    浏览(25)
  • MySql数据库的初步安装与数据表结构数据管理

    目录 一、数据库的相关了解 1)数据库的概念  数据(Data) 表 数据库系统 2)数据库系统发展史 第一代数据库 第二代数据库 第三代数据库 当今主流数据库介绍 2)数据库的分类  关系数据库 非关系型数据库 非关系型数据库的优点 二、mysql的yum安装与源码编译安装   1)源

    2024年02月08日
    浏览(99)
  • 数据结构—排序—选择排序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、选择排序 1、基本思想 2、直接选择排序 3、选择排序的代码实现 二、堆排序 2.1算法讲解 2.2堆排序的代码实现 总结 世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力

    2024年02月01日
    浏览(26)
  • 【数据结构 — 排序 — 插入排序】

    1.1.1排序的概念 排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且

    2024年02月05日
    浏览(29)
  • 【数据结构 — 排序 — 选择排序】

    每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。 2.1算法讲解 • 在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素 • 若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最

    2024年02月05日
    浏览(29)
  • 【数据结构 — 排序 — 交换排序】

    基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 2.1.算法讲解 以下只讲解冒泡排序代码的简单实现 ,想要更详细的了解冒泡排序

    2024年02月04日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包