📜  DAA选择排序

📅  最后修改于: 2020-12-10 03:50:56             🧑  作者: Mango

选择排序

选择排序通过对每次通过失败仅进行一次交换来增强气泡排序。为此,选择排序将在通过时搜索最大值,并在完成通过后将其放置在最大可能的区域中。类似地,与气泡排序一样,在第一遍之后,最大的项目在正确的位置。在第二遍之后,将设置以下最大值。由于必须在第(n-1)次通过之后设置最后一个项目,因此该过程将继续进行,并要求n-1进行n个项目的排序。

算法:选择排序(A)

1. k ← length [A]
2. for j ←1 to n-1
3. smallest ←  j
4. for I ← j + 1 to k
5. if A [i] < A [ smallest]
6. then smallest ←  i
7. exchange (A [j], A [smallest])

选择排序的工作方式

  • 首先,在选择排序中,我们将初始元素设置为minimum
  • 现在,我们将最小值与第二个元素进行比较。如果第二个元素小于最小值,我们将交换它们,然后将最小值分配给第三个元素。
  • 否则,如果第二个元素大于最小值(这是我们的第一个元素),那么我们将不执行任何操作,然后继续执行第三个元素,然后将其与最小值进行比较。我们将重复此过程,直到到达最后一个元素。
  • 每次迭代完成后,我们将注意到我们的最小值已达到未排序列表的开头。
  • 对于每次迭代,我们将从未排序列表的第一个元素开始索引。我们将重复步骤1到4,直到对列表进行排序或所有元素都正确定位为止。考虑以下未排序数组的示例,我们将在选择排序算法的帮助下进行排序。

    A [] =(7,4,3,6,5)。 A [] =

一次迭代:

设定最小值= 7

  • 比较01

由于a > 0 > a 1 ,请设置最小值= 4。

  • 比较12

如a 1 > a 2 ,设置最小值= 3。

  • 比较23

因为a 2 3 ,将最小值设置为3。

  • 比较24

如a 2 4 ,则将最小值设为3。

由于3是最小的元素,因此我们将交换02

第二次迭代:

设定最小值= 4

  • 比较12

如a 1 2 ,设置最小值= 4。

  • 比较13

As,A [1]

同样, 1 4 ,设置最小值= 4。

由于最小值已经放置在正确的位置,因此不会进行交换。

第3迭代:

设定最小值= 7

  • 比较23

如a 2 > a 3 ,设置最小值= 6。

  • 比较34

如a 3 > a 4 ,设置最小值= 5。

由于5是剩余的未排序元素中最小的元素,因此我们将交换7和5。

4次迭代:

设定最小值= 6

  • 比较34

3 4时,将最小值设置为6。

由于最小值已经放置在正确的位置,因此不会进行交换。

选择排序的复杂度分析

输入:给定n个输入元素。

输出:对列表进行排序的步骤数。

逻辑:如果给我们n个元素,则在第一遍中将进行n-1个比较;在第二遍,它将执行n-2 ;在第三遍中,它将执行n-3 ,依此类推。因此,可以通过以下方式找到比较的总数:

因此,选择排序算法包含O(n 2 )的时间复杂度和O(1)的空间复杂度,因为它需要一些额外的存储空间来交换临时变量。

时间复杂度:

  • 最佳情况复杂度:对于已排序的数组,选择排序算法的最佳情况时间复杂度为O(n 2 )。
  • 平均案例复杂度:选择排序算法的平均案例时间复杂度为O(n 2 ) ,其中现有元素以混杂的顺序排列,即既不以升序排列也不以降序排列。
  • 最坏情况的复杂度:最坏情况下的时间复杂度也是O(n 2 ) ,当我们将数组的降序排序为升序时会发生。

在选择排序算法中,这三种情况下的时间复杂度均为O(n 2 )。这是因为在每个步骤中,我们都需要找到最少的元素,以便可以将其放置在正确的位置。一旦我们跟踪了完整的数组,我们将获得最小元素。