1.概述

在本教程中,我们将讨论各种分类算法和在特定情况下使用它们的目的。虽然排序算法具有普遍的分类目的,但每个都具有自己的缺点和优点。有些算法覆盖现有问题中占有的问题。

这些问题是基于额外的空间需求、时间复杂度以及处理复杂或庞大数据的能力。在每种情况下,都会根据算法处理数据结构(如数组、链表、堆栈或队列)的方式应用算法。典型的应用程序是电子商务、数据库管理系统或图遍历。

2.排序算法

排序是将元素按顺序排列(通常是升序)的过程。必须搜索特定元素的应用程序需要有组织的数据。在这一节中,我们将看到各种排序算法及其复杂性。

2.1。合并排序

归并排序发明的,约翰·冯·诺依曼,采用分治方法对N元素数量。首先,值通过迭代拆分成相等大小的组(在该迭代的每个组包含\ frac {n} {2}元素),直到每个组只有一个值。然后元素以反向方式合并到拆分过程。合并逐渐对每个迭代进行合并组的数据。最后,生成一组排序元素:

合并排序适用于串联访问的数据结构。磁带驱动器是CPU按顺序访问数据的最佳示例。它也用于电子商务领域,以跟踪使用反转的用户兴趣。

不管数据是什么,归并排序执行相同的完整过程。时间复杂度的最佳、平均和最坏情况是O(n * log n)在哪里N是排序的元素数量。空间复杂性是O (n)用于额外的空间和O (1)当使用链表实现时。

数据将复制到每个迭代的单独列表中。因此,对于阵列不是优选的,尤其是大数据集。链接列表更好,因为插入不需要额外的空间。

2.2。泡沫排序

冒泡排序是其中之一最简单的排序算法它进入了使用艾弗森通过比较每对相邻元素并在不按升序顺序交换它们来排序。该过程进行各种迭代完全排序。随着迭代的继续,列表开始按照最后一个元素按顺序下降:

较小的列表使用冒泡排序,因为它很简单2 n完成排序。在计算机图形中,它用于多边形填充算法以按顺序排列线的坐标。

对于排序列表,时间复杂度的最佳情况是O (n)。平均和最糟糕的情况是o(n * n),其中最坏情况是元素按降序排列。在最坏的情况下,在每次迭代时,到达终点的最大对数被交换。冒泡排序仍然用于基本理解排序算法和较小的元素集。

2.3。选择排序

选择排序是通过查找最小元素并替换值来进行排序过程。该算法从第一个位置的项开始比较。它与其他值一起检查,看是否在任何其他位置存在较小的值。如果是,它会互换元素,确保将最小的数字放在第一个位置。

例如,元素X在第一个位置将针对每个元素检查到其右侧。如果X少于任何其他元素y,然后X仍然存在。除此以外,X掉期交易与y, 现在y与其他元素进行比较。此过程最终提供了元素的排序顺序:

该算法比较每个位置的每个元素,因此选择排序的时间复杂度是o(n * n)。另一方面,空间复杂性是O (1)。它在一小组条目中排序更快。就像冒泡排序一样,学习排序的概念也很有用。

2.4。Quicksort.

Quicksort.是另一种使用分治技术的排序方法,由Tony Hoare开发。该算法根据选定的主元数重复分割元素(整个分拣过程都在同一位置)。它不断地对子组执行此操作,直到到达具有单个元素的组。该方法根据主元数的大小将组划分为两个子组:

最好和平均案例的时间复杂性是O(n * log n)。最佳案例是选择每次中位数的枢轴数。

最坏的情况是选择所选的枢轴数是每次最小或最大的数字。当元素按升序或降序排序时,可能会发生这种状态。最坏情况的时间复杂性是o(n * n)

该分类方法的空间复杂性是O (log n)。尽管Quicksort不需要多大的额外空间,但它并不是建议更大的数据集。

快速排序在虚拟环境中工作得更快,在虚拟环境中,不属于主内存的内存空间在运行进程时看起来像主内存的一部分。它非常适合数组,因为它更容易根据位置访问元素,而且不需要额外的存储空间。

2.5。hea

J.W.J.威廉姆斯发达的方法堆排序它通过构造二叉树结构对元素进行排序。有两种类型的树形式:最大堆树和最小堆树。当父节点大于子节点时,称为最大堆树。当父节点小于子节点时,就称为最小堆树。

heapsort按照三个主要操作进行:heapify,swap和插入。

  • 在堆化过程中,每次插入新节点后都检查树是否满足最大堆或最小堆树结构。
  • 树中的堆形式后,第一个元素随着最后一位递交
  • 最后,它将更新的树中的终端元素插入到排序的输出列表中

这三个步骤重复执行,直到根节点被插入到输出列表中,以获得排序后的元素:

需要安全性的系统和嵌入式系统使用堆排序。由于它对元素排序的过程通常是相同的,所以它在所有情况下的时间复杂度都是O(n * log n)

因为空间的复杂性是O (1),非常推荐用于排序链表。当元素增加时,堆排序的复杂性以对数的方式增加,这使得它适合于大型数据集。

2.6。插入排序

插入排序是一种简单的迭代排序方法John Mauchly插入排序遵循三个步骤:比较,移动和放置。

插入排序在每个迭代和步骤中将其继任者与其继任者进行比较:

  • 的元素阵列[a]是否比较其继任者数组(+ 1)比它大
  • 如果是,则保持原样,现在是后续元素数组(+ 1)用它的相邻元素检查数组(+ 2)
  • 否则,该元素阵列[a]移动一个位置并为插入空间提供空间
  • 而连续元素数组(+ 1)是否与它之前的元素进行比较并放在列表中正确的位置
  • 放置时,物品x被置于这样一个位置,它的前辈都不如x

最糟糕的时间复杂性的情况是o(n * n),每个元素都移动以构建排序列表,并且每次剩下的比特都会换档。最好的方案是它是一个排序的列表,时间复杂性是O (n)。插入排序的空间复杂度是O (1)。插入排序可用于较小的数据集和较大数据集中的几乎排序列表。

2.7。Introsort

Introsort由David Musser发明的是一种混合分选算法,其没有任何单独的分类技术,而且由于其排序策略而显着。介绍中的主要特征是根据数据集选择插入排序,QuickSort和Heapsort之间。

每个排序算法都具有其优点和缺点。Introsort使用合适的排序算法根据数据集。由于插入排序良好,因此有更多次要数据,因此它会种类这些数据。当枢轴元件是通过找到中位数获得的中间值时,Quicksort很好。和堆排序当迭代变高时使用。仍然,Introsort具有它不能将数据放入阵列中的主要缺点。

3.概要

下面是每种排序算法首选时的汇总表。

呈现由QuickLaTeX.com

4。结论

在本教程中,我们定义了各种排序算法,并解释了它们的排序过程。给出了它们的时间复杂度和空间复杂度,从而给出了每种算法的优缺点。这样,读者将最终获得这些排序算法的应用领域。

来宾
0.评论
内联反馈
查看所有评论