c++中如何实现冒泡排序_c++冒泡排序算法代码【实例】

9次阅读

冒泡排序的核心逻辑是重复遍历数组,比较相邻元素并交换,使每轮最大(升序)或最小(降序)值“冒泡”至末尾;i 控制轮数,j 控制每轮比较范围,需注意边界条件。

c++中如何实现冒泡排序_c++冒泡排序算法代码【实例】

冒泡排序的核心逻辑是什么

冒泡排序本质是重复遍历待排序数组,每次比较相邻两个元素,把较大(升序)或较小(降序)的那个“冒泡”到末尾。关键在于:每轮遍历后,未排序部分的极值会就位,所以下一轮可以少比较一次。

容易忽略的是边界控制——i 控制轮数,j 控制每轮比较范围,j 这个条件缺一不可,否则会越界或做无用比较。

标准 c++ 实现(含注释和测试)

以下代码使用 std::vectorsize_t 类型,避免有符号/无符号混用警告;用引用传参避免拷贝;内层循环上限动态收缩。

#include  #include 

void bubbleSort(std::vector& arr) { size_t n = arr.size(); for (size_t i = 0; i < n - 1; ++i) { bool swapped = false; // 优化:提前终止 for (size_t j = 0; j < n - 1 - i; ++j) { if (arr[j] > arr[j + 1]) { std::swap(arr[j], arr[j + 1]); swapped = true; } } if (!swapped) break; // 没发生交换,说明已有序 } }

int main() { std::vector nums = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(nums); for (int x : nums) std::cout << x << " "; std::cout << "n"; return 0; }

常见错误与陷阱

写错下标、忘记优化、类型不匹配,是初学者最常踩的坑:

立即学习C++免费学习笔记(深入)”;

  • j 或 j → 数组越界访问 arr[j+1]
  • int i 遍历 size_t n → 编译器警告,且当 n == 0i-- 变成极大正数
  • 没加 swapped 标志 → 即使输入已有序,仍执行全部 O(n²) 次比较
  • 传值而非传引用 → void bubbleSort(std::vector arr) 修改的是副本,原数组不变

性能和适用场景提醒

冒泡排序时间复杂度恒为 O(n²)(最坏/平均),最好情况加优化后是 O(n);空间复杂度 O(1)。它只适合教学、极小数据(n )或几乎有序的特殊场景。

实际项目中,std::sort 是更优选择——底层是混合算法(introsort),平均 O(n log n),且经过高度优化。别为了“手写算法”在生产环境替换 std::sort

真正要注意的,是理解为什么每轮能缩小范围,以及 swapped 标志如何改变最坏/最好情况的落差——这才是面试或调试时容易卡住的地方。

text=ZqhQzanResources