为何我的冒泡排序算法出现无限循环?两段代码差异解析
冒泡排序无限循环问题:两段代码的核心差异
核心差异:是否真正修改了原数组元素
错误代码的问题点
这段代码触发无限循环的根源是只交换了临时变量的值,完全没修改原数组:
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
相关产品推荐
相关产品推荐

