如何用冒泡排序算法实现代码练习?
- 内容介绍
- 文章标签
- 相关推荐
本文共计805个文字,预计阅读时间需要4分钟。
很多人写的冒泡排序跑了一轮就停了,或者多跑一轮导致越界,问题出在内外层循环的终止条件上。
控制轮数,变量j控制每轮比较的范围,每轮结束后,最大元素冒到末尾,下一轮比较范围要减一。
-
i从0到n-1(共n轮,但实际最多n-1轮就能排好) -
j从0到n-2-i,不是n-1-i—— 因为要访问arr[j+1],所以j+1 < n⇒j < n-1 - 如果用
for (int j = 0; j < n - 1 - i; j++),边界刚好卡住不越界
为什么 swap 后不加 break 就不是“优化版”冒泡
标准冒泡每轮都扫到底;所谓“优化”是指提前发现已有序时直接退出。但很多人只加了 if (swapped == false) break;,却忘了重置 swapped 标志位——结果第二轮就失效了。
本文共计805个文字,预计阅读时间需要4分钟。
很多人写的冒泡排序跑了一轮就停了,或者多跑一轮导致越界,问题出在内外层循环的终止条件上。
控制轮数,变量j控制每轮比较的范围,每轮结束后,最大元素冒到末尾,下一轮比较范围要减一。
-
i从0到n-1(共n轮,但实际最多n-1轮就能排好) -
j从0到n-2-i,不是n-1-i—— 因为要访问arr[j+1],所以j+1 < n⇒j < n-1 - 如果用
for (int j = 0; j < n - 1 - i; j++),边界刚好卡住不越界
为什么 swap 后不加 break 就不是“优化版”冒泡
标准冒泡每轮都扫到底;所谓“优化”是指提前发现已有序时直接退出。但很多人只加了 if (swapped == false) break;,却忘了重置 swapped 标志位——结果第二轮就失效了。

