You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

冒泡排序嵌套for循环的range(n-1)与range(n-i-1)逻辑疑问

冒泡排序两层循环范围的疑问解答

先解释外层循环的range(n-1):

  • 冒泡排序的核心是每一轮把当前未排序部分的最大元素“冒”到末尾。对于长度为n的数组,最多只需要n-1轮排序就足够——经过n-1轮后,前n-1个元素都已排好序,最后一个元素自然处于正确位置,完全没必要再跑第n轮。比如你提供的长度为9的数组,跑8轮就能让整个数组有序。

再看内层循环的range(n-i-1):

  • 每完成一轮外层循环(i从0开始计数),就有i个最大的元素被放到了数组末尾的正确位置,这些元素不需要再参与后续比较。
  • 比如i=0时是第一轮排序,需要比较整个数组的相邻元素,j最大只能到7(因为要比较array[j]和array[j+1],j+1得是数组最后一个索引8),所以范围是n-0-1=8,对应range(8),也就是j取0到7。
  • 当i=1时,已经有1个最大元素固定在末尾,只需要比较前8个元素,j最大到6即可,对应范围n-1-1=7,也就是range(7),j取0到6,以此类推。
  • 这种写法能避免重复比较已经排好序的末尾元素,减少不必要的计算,提升排序效率。

拿你给出的数组举例:

  • 第1轮(i=0):内层循环跑8次,把最大的9“冒”到数组最后;
  • 第2轮(i=1):内层循环跑7次,把第二大的8“冒”到倒数第二的位置;
  • ...
  • 第8轮(i=7):内层循环只跑1次,仅比较前两个元素,把较小的放到前面,整个数组就完全有序了。

内容的提问来源于stack exchange,提问作者ChloeXRH

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:07