气泡排序与选择排序

721 阅读8分钟

泡点排序和选择排序都是基于比较的排序算法,可以通过它们用于排序的方法加以区分。但在了解它们之间的主要区别之前,让我们先了解这两种算法的工作原理。

我们在本文中进一步列出了差异表。

内容表

  1. 气泡排序的基础知识
  2. 选择排序的基础知识
  3. 泡沫排序和选择排序的主要区别
  4. 总结
  5. 测试你的知识
  6. 总结

气泡排序的基础知识

冒泡排序是一种基于比较的排序算法,包括在输入数组上进行传递,在每一次传递中,如果相邻的元素没有按照要求的顺序(升序或降序)出现,就会被交换。它不断地进行传递,直到整个数组被排序完毕。

气泡排序算法(按升序排列)

  1. 从第一个索引开始,比较前两个元素。如果第一个元素大于第二个元素,就把它们交换;否则就保持原样。
  2. 现在,比较接下来的两个元素。如果它们的顺序不一致,就把它们换掉。这个过程一直持续到最后一个元素。

第一遍完成了--最大的元素将在数组的最后。

  1. 同样的过程将持续到其余的传递。每一次传递后,未排序的元素中最大的元素被放在最后。

在每一次传递中,比较都要进行到最后一个未排序的元素。当所有未排序的元素被放置在各自正确的位置时,数组就被排序了。

***优化的泡沫排序。*如果在一次传递中,我们没有进行任何交换,那么我们就不需要再进行任何传递。

逐次迭代的泡泡分类可视化

bubble

Java中的泡沫排序代码

public static void bubbleSort(int arr[])
    {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++)
            for (int j = 0; j < n - i - 1; j++)
                if (arr[j] > arr[j + 1]) {
                    // swap arr[j+1] and arr[j]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
    }

选择排序的基础知识

选择排序也是一种基于比较的排序算法,它涉及到将给定的数组划分为两个部分:

  • 已排序的子数组,它最初是空的
  • 未排序的子数组,最初包含所有的元素

考虑到我们要对数组进行升序排序。
在每次迭代中,我们从未排序的子数中挑选最小的元素,并将其放在已排序的子数的末尾。我们重复这整个过程,直到未排序的数组变成空。

选择排序算法(按升序排列)

反复从未排序的子数组中选择最小的元素,并将其交换到适当的索引:

  1. 找到数组中最小的一项,并将其与第一项交换。
  2. 找到数组中下一个最小的元素,并将其与下一个元素互换。
  3. 继续,直到数组中的所有项都被排序。

选择排序的逐个迭代可视化

selection_algorithm

Java中的选择排序代码

    void selectionSort(int arr[])
    {
        int n = arr.length;
  
        for (int i = 0; i < n-1; i++)
        {
            // Finding the minimum element in each loop
            int min_idx = i;
            for (int j = i+1; j < n; j++)
                if (arr[j] < arr[min_idx])
                    min_idx = j;
  
            // Putting the minimum element at correct position
            int temp = arr[min_idx];
            arr[min_idx] = arr[i];
            arr[i] = temp;
        }
    }

气泡排序和选择排序的主要区别

以下是用于判断两种算法之间差异的参数。

功能性

冒泡排序比较相邻的元素,并相应地交换它们,而选择排序从未排序的子阵列中选择最小的元素,并将其放在已排序子阵列的下一个位置。

效率

冒泡排序和选择排序之间的另一个主要区别是,选择排序比冒泡排序更有效率

速度

选择排序比冒泡排序更,因为它需要较少的比较次数。

方法

冒泡排序和选择排序之间的另一个区别是,冒泡排序使用项目交换方法,而选择排序使用项目选择方法

稳定性

冒泡排序是一种稳定的算法,在这种算法中,相等元素之间的相对顺序将被保持。选择排序是一种不稳定的算法

然而,选择排序可以通过在比较和排序时加入相等元素的索引而变得稳定。但是,这将导致空间复杂度从O(1)增加到O(N),其中N是数组的大小。
气泡排序的稳定性

stablebubble

迭代性

选择排序是一种非迭代算法,而冒泡排序是一种迭代算法。

降序

  • 选择排序算法可以将列表中的给定元素按升序或降序排序。
  • 泡沫排序算法对列表中的给定元素按升序排序,然后将列表反转,以便按降序打印数组中的元素。

时间复杂度

这两种算法的时间复杂度如下。

最佳情况。
  • **选择排序。**最佳情况下的复杂度是O(N^2),因为要在每次迭代中找到最小元素,我们必须遍历整个未排序的数组。
  • **泡沫排序。**最佳情况下的复杂度是O(N)。它发生在我们有一个已经排序的数组时。我们将不得不运行一次迭代(N-1次比较)来确定这一点。在这种情况下,时间复杂度将是O(N)。
最坏的情况。
  • **选择排序。**最坏情况下的复杂度是O(N^2),因为我们将不得不遍历整个未排序的数组,以便在每个迭代中找到最小元素。
  • **泡沫排序。**最坏情况下的复杂度是O(N^2)。它发生在我们有一个反向排序的数组,在这种情况下,我们将不得不进行(N-1)次传递,其中N是数组中存在的元素数量。
平均情况。

对于随机数据集,两种算法的时间复杂度都是O(N^2)。

应用

  • 选择排序可以对一个链表进行排序,因为我们可以有效地移除最小的元素,并将其追加到排序后的列表中。
  • 泡点排序用于检测已排序数据集中的小错误,并对几乎已排序的数据集进行快速排序。

总结:冒泡排序与选择排序

冒泡排序和选择排序的主要区别在于,冒泡排序的操作方式是,如果相邻元素的顺序不对,就反复交换它们。相反,选择排序是通过反复从未排序的部分中找到最小的元素(或者,如果我们想按降序排序,则是最大的元素),并将其放在数组的开始位置来排序。

参数气泡排序选择排序
功能特点相邻的元素被比较和
互换
最大/最小的元素被选中并
与最后一个元素交换
(在升/降序的情况下)。

| | 效率高 | 效率较低 | 效率较高 | | 速度 | 较慢 | 更快 | | 比较的数量 | 大 | 较少 | | 方法 | 交换 | 选择 | | 稳定的 | 有 | 不稳定 | | 适应性强 | 是 | 没有 | | 在位 | 是 | 是 | | 迭代性 | 迭代算法 | 非迭代算法 | | 降序排列 | 数组首先以升序排序
,然后反过来

降序
显示元素

| 可以对
数组
中的给定元素
按升序
或降序排序。

| | 最佳情况下的时间复杂度 | O(N) | O(N^2) | | 最坏情况下的时间复杂度 | O(N^2) | O(N^2) | | 平均情况下的时间复杂度 | O(N^2) | O(N^2) | | 空间复杂度 | O(1) | O(1) | | 应用 | 有助于检测
几乎排序的
数据集中


小错误
| 可以应用于链接的
列表
| | 优势 | 最简单的稳定原地排序
算法
| 当交换操作
成本较高时
有效 | | 劣势 | 对大型
数据集
来说效率很低 | 不具备可扩展性 |

测试你的知识

问题1

给定的数组是arr = {1, 2, 4, 3}。泡点排序是用来对数组元素进行排序的。将进行多少次迭代来对该数组进行排序?

4

2

1

0

尽管前两个元素已经被排序,但是冒泡排序需要4次迭代来对给定数组进行排序。你怎样才能提高冒泡排序的最佳效率?(输入已经被排序)

问题2

冒泡排序算法的空间复杂度将是多少?

O(N)

O(2^N)

O(1)

O(N^2)

除了已经用于存储原始数组和用于交换数组元素的临时变量外,没有使用额外的空间/内存。排序是直接在原始数组上完成的。这个符号是用来说明恒定的空间复杂性的。

问题3

选择排序的平均情况复杂度是多少?

O(N^2)

O(NlogN)

O(logN)

O(N)

在平均情况下,即使输入被部分排序,选择排序的行为就像整个数组没有被排序一样。选择排序对输入是不敏感的。

问题4

选择排序的缺点是什么?

它不具有可扩展性

它需要辅助内存

它可以用于小键

它需要线性时间来排序元素

随着输入大小的增加,选择排序的性能会下降。

问题5

给定的数组是arr = {3,4,5,2,1}。请分别找出冒泡排序和选择排序的迭代次数。

5和4

4和5

2和4

2和5

由于输入数组没有被排序,所以冒泡排序需要5次迭代,选择排序需要4(n-1)次迭代。

总结

在OpenGenus的这篇文章中,我们学习了使用选择排序和冒泡排序的概念,了解了选择排序和冒泡排序的主要区别,如用于排序的方法,它们的效率、稳定性、功能、时间的复杂性、速度、应用等。