跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

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

冒泡排序的核心逻辑是重复遍历数组,比较相邻元素并交换,使每轮最大(升序)或最小(降序)值“冒泡”至末尾;i 控制轮数,j 控制每轮比较范围,需注意边界条件。 冒泡排序 的核心逻辑是什么 冒泡排序本质是重复遍历待排序数组,每次比较相邻两个元素,把较大(升序)或较小(降序)的那个“冒泡”到末尾。关键在于:每轮遍历后,未排序部分的极值会就位,所以下一轮可以少比较一次。 容易忽略的是边界控制——
i
控制轮数,
j
控制每轮比较范围,
j 这个条件缺一不可,否则会越界或做无用比较。
标准 C++ 实现(含注释和测试) 以下代码使用
std::vector
和
size_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++免费学习笔记(深入) ”; C函数速查手册(CHM版) C函数速查手册(CHM版) 下载
j 或 j → 数组越界访问 arr[j+1]
用
int i
遍历
size_t n
→ 编译器警告,且当
n == 0
时
i--
变成极大正数 没加
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
标志如何改变最坏/最好情况的落差——这才是面试或调试时容易卡住的地方。

相关文章