📜  气泡排序的C ++程序(1)

📅  最后修改于: 2023-12-03 14:55:57.646000             🧑  作者: Mango

气泡排序的C ++程序介绍

气泡排序是一种简单但慢速的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并将其位置交换,直到没有可以交换的元素为止,这样最大或最小的元素就“浮”到了顶端或底端,然后算法重新从首个元素开始遍历未排序的部分。

算法实现

以下是C ++中实现气泡排序算法的代码片段,它演示了如何使用嵌套循环来实现算法。

void bubbleSort(int arr[], int n) {
  bool swapped;
  for (int i = 0; i < n - 1; i++) {
    swapped = false;
    for (int j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        swap(arr[j], arr[j + 1]);
        swapped = true;
      }
    }
    if (swapped == false) {
      break;
    }
  }
}

代码的解释:

  1. swapped 的布尔值变量用于跟踪数组中的元素是否已被交换。如果没有交换,这意味着该数组已经排序,并且循环可以提前退出。
  2. 外部循环进行 $n-1$ 轮迭代,因为元素两两比较,排除最后一个元素之后,会剩下 $n-1$ 个元素需要比较。
  3. 内部循环是每一轮中实际进行比较的迭代。每次循环中,将当前元素 arr[j] 和它相邻的下一个元素比较 arr[j + 1],如果顺序不对,则交换它们的位置,这将保证较大的元素“浮”到顶部。
  4. 根据布尔变量检查循环是否与上一次迭代进行了任何一次交换的操作,如果没有,说明列表已经排序,可以退出循环。
示例

以下是一个使用上述C ++代码的示例,展示如何在控制台中输入一个数组并通过气泡排序算法对其进行排序。

#include <iostream>

using namespace std;

void bubbleSort(int arr[], int n);

int main() {
  int n, arr[100];

  cout << "Enter number of elements in the array: ";
  cin >> n;

  cout << "Enter the elements of the array: ";
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }

  bubbleSort(arr, n);

  cout << "Sorted array: ";
  for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
  }
  cout << endl;

  return 0;
}
性能

气泡排序算法的时间复杂度为 $O(n^2)$,其中 $n$ 是待排序的元素数量。这使得气泡排序算法在大数据集上的排序非常慢,因此,它通常不用于生产应用程序中。

虽然仿佛没有任何优点,但其实该算法有一个非常重要的优点:它在数组几乎排好序的情况下表现非常好,因为它只需要很少的迭代和比较操作即可完成排序。这使得气泡排序算法成为学习排序算法的入门课程中不错的选择。

结论

以上是关于气泡排序算法在C ++中的介绍。尽管这是一种非常基础的排序算法,但它可以帮助初学者理解排序算法,并且非常适合小型数据集的排序。当然,如果排序的数据量很大,气泡排序的计算时间将成为一个重大的瓶颈,其他更高级的排序算法可能会更好地胜任这一任务。