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;
}
输出

冒泡排序的复杂度, 优缺点:
复杂性:
- 时间复杂度: O(n 2 )
- 辅助空间: O(1)详情
冒泡排序的优点:
- 冒泡排序算法易于理解和实现。
- 它不需要额外的内存空间。
- 它是一种稳定的排序算法,这意味着具有相同键值的元素在排序后的输出中保持其相对顺序。
冒泡排序的缺点:
- 冒泡排序的时间复杂度为 O(n 2 ),这使得它对于大型数据集来说速度非常慢。
- 冒泡排序在现实世界中几乎没有或只有有限的应用。它主要用于学术研究,用来教授不同的排序方法。

浙公网安备 33010602011771号