4-1 比较排序:冒泡排序

冒泡排序

冒泡排序是最简单的排序算法,它通过不断交换顺序错误的相邻元素来解决问题。但这种算法处理大型数据集效率不高,因为它的平均时间复杂度和最坏情况下的时间复杂度都相当高。

  • 使用多次遍历对数组进行排序。第一次遍历后,最大值移到末尾(即其正确位置)。同样,第二次遍历后,第二大值移到倒数第二个位置,依此类推。
  • 每次迭代中,只处理那些尚未移动到正确位置的元素。经过 k 次迭代后,最大的 k 元素必须移动到最后 k 个位置。
  • 在一次遍历中,我们考虑剩余元素,比较所有相邻元素,如果较大的元素位于较小的元素之前,则交换它们的位置。如果我们不断重复这个过程,就能将(剩余元素中的)最大元素置于正确的位置。

以下是冒泡排序的实现。可以通过在内层循环没有发生任何交换时停止算法来优化它


代码实现

#include <bits/stdc++.h>

// An optimized version of Bubble Sort 
void bubbleSort(std::vector<int>& arr)
{
    int n = arr.size();
    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])
            {
                std::swap(arr[j], arr[j + 1]);
                swapped = true;
            }
        }
      
        // If no two elements were swapped, then break
        if (!swapped)
        {
            break;
        }
    }
}

// Function to print a vector
void printVector(const std::vector<int>& arr)
{
    for (int num : arr)
    {
        std::cout << " " << num;
    }

}

int main()
{
    std::vector<int> arr = { 64, 34, 25, 12, 22, 11, 90 };
    bubbleSort(arr);
    std::cout << "Sorted array: \n";
    printVector(arr);
    return 0;
}

输出

image


冒泡排序的复杂度, 优缺点:

复杂性:

  • 时间复杂度: O(n 2 )
  • 辅助空间: O(1)详情

冒泡排序的优点:

  • 冒泡排序算法易于理解和实现。
  • 它不需要额外的内存空间。
  • 它是一种稳定的排序算法,这意味着具有相同键值的元素在排序后的输出中保持其相对顺序。

冒泡排序的缺点:

  • 冒泡排序的时间复杂度为 O(n 2 ),这使得它对于大型数据集来说速度非常慢。
  • 冒泡排序在现实世界中几乎没有或只有有限的应用。它主要用于学术研究,用来教授不同的排序方法。
posted @ 2026-03-30 16:59  游翔  阅读(1)  评论(0)    收藏  举报