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

为何我的冒泡排序算法出现无限循环?两段代码差异解析

冒泡排序无限循环问题:两段代码的核心差异

核心差异:是否真正修改了原数组元素

错误代码的问题点

这段代码触发无限循环的根源是只交换了临时变量的值,完全没修改原数组:

array = [16,1,2,3,4,5]
n = len(array)

swapped = True

while swapped == True:
    swapped = False
    for inner_index in range(1,n):
        first_number = array[inner_index - 1]
        second_number = array[inner_index]
        if first_number > second_number:
            # 仅交换临时变量的副本值,原数组元素毫无变化
            first_number, second_number = second_number, first_number
            swapped = True
print(array)

first_number和second_number只是原数组元素的拷贝,交换它们不会改变数组本身。数组里的16永远停在第一个位置,每次循环都会触发swapped = True,导致while循环永远无法终止。

正确代码的修复点

正确代码直接操作原数组的索引位置,真正交换了数组中的元素:

array = [16,1,2,3,4,5]
n = len(array)

swapped = True # 注意布尔值首字母大写

while swapped == True:
    swapped = False
    for inner_index in range(1,n):
        if array[inner_index - 1] > array[inner_index]:
            # 直接修改原数组的对应索引元素,数组内容真正更新
            array[inner_index - 1], array[inner_index] = array[inner_index], array[inner_index-1]
            swapped = True
print(array)

这里跳过了临时变量,直接对数组的索引位置进行交换,每次操作都会改变数组的实际内容。当数组完全有序后,循环中不会再触发交换,swapped保持为False,while循环正常退出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:35:24