
本文详解在算法语句计数中,如何精确统计 for 循环条件表达式被求值的总次数(包括每次为 true 的检查和最终导致循环退出的 false 检查),并以冒泡排序为例给出正确实现。
本文详解在算法语句计数中,如何精确统计 for 循环条件表达式被求值的总次数(包括每次为 true 的检查和最终导致循环退出的 false 检查),并以冒泡排序为例给出正确实现。
在分析算法时间复杂度或进行教学级语句执行计数时,循环条件的检查次数常被忽略或误算。关键在于:for (init; condition; update) 中的 condition 表达式每次迭代开始前都会被求值一次,且最后一次求值结果为 false 时,循环终止——该次 false 检查也必须计入总数。
以标准两层嵌套 for 循环为例:
for (int x = 0; x
-
内层循环条件
y:对每个固定的x,它会被检查(n - x) + 1次(n-x次为true,第n-x+1次为false); -
外层循环条件
x:被检查n次(x = 0,1,...,n-2时为true,x = n-1时为false); -
注意:内层循环退出后,外层循环仍需再次检查其自身条件才能决定是否继续下一轮——因此外层条件的
false检查独立于内层。
回到原问题中的冒泡排序代码,错误源于将 stats.conditionStatements += 1 统一放在内层循环体末尾,这仅统计了内层条件为 true 的次数,却遗漏了:
- 每次内层循环结束时,其条件最后一次
false检查; - 外层循环每次迭代后对自身条件的检查(含最终
false); - 外层循环整体结束时的最终
false检查。
✅ 正确计数逻辑如下(对应答案中的修正):
x










