首页 > 编程语言 >数据结构与算法分析:你真的理解排序算法吗——总结

数据结构与算法分析:你真的理解排序算法吗——总结

时间:2024-10-27 17:51:58浏览次数:3  
标签:排序 结果 元素 算法 随机 数据结构 数据

一、选择排序算法的标准

选择一个排序算法时,考虑下表的定性标准。这些标准可能能够帮你做出最初的决定,但是你需要更多量化标准作为指引。
在这里插入图片描述
在为不同的数据选择合适的算法的时候,你需要知道输入数据的一些性质。我们创建了一些基准测试数据来比较本章所讲述的算法。注意表中的实际值是并不重要的,因为它们和基准测试运行的硬件相关。然而,你需要注意算法在这些数据集合的相对性能。
随机字符串:
通过这段时间的讲述,给定n!个字符串,或者大约4.03*1026个字符串,并且这些字符串
很少重复,不仅如此,比较元素的开销不是常数。因为有时候会需要比较多个字
符。通过计算这样的数据,我们可以知道明白了当排序26个字母的字符串时各个排
序算法的性能。
双精度的浮点值:
使用在大多数操作系统上可用的伪随机数生成器,我们得到了一系列范围在[0,1)的
随机数。在这个数据集合中基本上没有重复的元素,比较两个元素的开销是一个固
定的常数。
给排序算法的输入数据可以被预处理,为了确保以下性质(并不是都相容的)。
有序:
输入数据可是预先有序的,降序或者升序(最终目的)。
三中值方法的反例:
Musser(1997)发现了一个排列的顺序,这个顺序能够确保快速排序在使用三中值
选择中枢值的时候需要O(n2)次比较。
几乎有序:
给定一个有序的数据,我们选择相距d的k对元素进行交换(如果d为0则表示任意两
个元素能够交换)。这样就能够构造一个和输入很相似的数据。
接下来的表中的列是按照算法在表最后一行的性能表现从左到右排好序。

二、综合分析基准测试结果

因为插入排序和选择排序是本章中在随机均匀数据(提升一些数量级)最慢的两个算法,所以我们在下面忽略这两个算法。但是,这两个算法值得处理有序数据和几乎有序数据。插大排序比其他算法表现要好,通常要快一个数量级。为了得到下表的结果,我们在高端计算机上执行了100次实验,抛弃最好和最坏的结果,把剩下的98次结果的平均值填在表中。标记为QuicksortBFPRT minSize=4的列表示一个快速排序的实现,它使用了BFPRT(集合大小为4)来选择切分值,并且在子数组规模少于4个元素的时候切换到插人排序。
在基于26个字母随机生成转置排序上的结果:
在这里插入图片描述
在基于26个字母随机生成的有序转置排序的结果:
在这里插入图片描述

在对中值选择最不利的数据上进行排序的结果:
在这里插入图片描述
因为三中值快速排序速度退化的厉害,因此只进行了10次实验,表中所示的是最好的和最坏的情况去除以后,8次运行的平均值。
在随机交换16对相距8个位置的元素的数据上排序的结果:
在这里插入图片描述

在随机交换n/4对相距4个位置的元素的数据上排序的结果:
在这里插入图片描述

三、双浮点数基准测试结果

使用双浮点数的基准测试,消除了很多字符串比较的时候产生的总开销,我们再一次在下表中忽略了插入排序和选择排序:
排序随机浮点数的算法性能:
在这里插入图片描述
排序有序浮点数的算法性能:
在这里插入图片描述
在对中值选择最不利的数据上进行排序的结果:
在这里插入图片描述
在随机交换16对相距8个位置的元素的数据上排序的结果:
在这里插入图片描述
在随机交换n/4对相距4个位置的元素的数据上排序的结果:
在这里插入图片描述

四、总结

关于排序算法的讲解到此就结束了,后面在专栏中我们将开始讲解查找相关的算法。

标签:排序,结果,元素,算法,随机,数据结构,数据
From: https://blog.csdn.net/qq_70625456/article/details/143216467

相关文章

  • 贪心算法案例 - 分发饼干
    贪心算法案例-分发饼干(Easy)1.题目描述有一群孩子和一堆饼干,每个孩子有一个饥饿度,每个饼干都有一个大小。每个孩子只能吃最多一个饼干,且只有饼干的大小大于孩子的饥饿度时,这个孩子才能吃饱。求解最多有多少孩子可以吃饱?2.输出案例输入两个数组,分别代表孩子的饥饿度和饼干......
  • java数据结构
    Java提供了丰富的数据结构来处理和组织数据。Java的java.util包中提供了许多这些数据结构的实现,可以根据需要选择合适的类。以下是一些常见的Java数据结构:数组(Array):数组(Arrays)是一种基本的数据结构,可以存储固定大小的相同类型的元素。int[]array=newint[5];特......
  • 算法汇总
    排序算法计数排序voidcountsort(int*a,intn)//计数排序{for(inti=1;i<=n;i++){cnt[a[i]]++;}for(intj=1;j<=Max;j++){for(intk=0;k<cnt[j];k++)cout<<j<<""......
  • 代码随想录算法训练营Day45 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、1
    目录121.买卖股票的最佳时机122.买卖股票的最佳时机II123.买卖股票的最佳时机III121.买卖股票的最佳时机题目121.买卖股票的最佳时机-力扣(LeetCode)给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i天的价格。你只能选择某一天买入这只......
  • Floyd 算法
    算法用途:Floyd算法是用于解决两点间最短路径的一种算法,可以处理有向图或负权的最短路问题。该算法时间复杂度为\(O(N^3)\),空间复杂度为\(O(N^2)\)。算法原理Floyd算法基于动态规划实现。Floyd算法一直在解决一个问题,寻找\(i\rightarrowj\)的最短路径(废话)。但是,既......
  • 数据结构:“小猫钓鱼游戏”
    一:题目栈和队列的综合应用:“小猫钓鱼”的游戏规则是:将一副扑克牌平均分成两份,每人拿一份。玩家甲先拿出手中的第一张扑克牌放在桌上,然后玩家乙也拿出手中的第一张扑克牌,并放在玩家甲刚打出的扑克牌的上面,就像这样两个玩家交替出牌。出牌时,如果某人打出的牌与桌上某张牌的牌......
  • 数据结构~红黑树
    文章目录一、红黑树的概念二、红黑树的定义三、红黑树的插入四、红黑树的平衡五、红黑树的验证六、红黑树的删除七、完整代码八、总结一、红黑树的概念红黑树是一棵二叉搜索树,他的每个结点增加⼀个存储位来表示结点的颜色,可以是红色或者黑色。通过对任何⼀条从根到......
  • 【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
      ......
  • 基于启发式蝙蝠算法、粒子群算法、花轮询算法和布谷鸟搜索算法的换热器PI控制器优化(Ma
    ......
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
    努力的意义大概就是当好运来临的时候你觉得你值得                                                ——24.10.24105.从前序与中序遍历序列构造二叉树给定两个整数数组 preorder 和 inorder ,其中 preorder 是......