Python中冒泡排序无法正常排序问题排查求助
冒泡排序代码错误排查
一眼就揪出问题啦!你的内层循环明明定义了j变量,但从头到尾完全没用到它,反而一直用外层循环的i来做元素比较和交换——这直接偏离了冒泡排序的核心逻辑,自然没法完成正确排序。
错误原因详解
冒泡排序的内层循环核心是逐个遍历当前未排序的元素段,比较相邻的两个元素,也就是让j从0开始,每次比较N[j]和N[j+1],这样每一轮内层循环才能把当前未排序部分的最大元素"冒"到末尾。但你现在的代码里,不管内层循环跑多少次,都只在比较N[i]和N[i+1]这一对固定位置的元素,相当于每一轮外层循环只交换了一次元素,完全起不到遍历排序的作用。
修改后的正确代码
把比较和交换的索引换成j就搞定了:
N = [80000, 20, 40 , 50, 10000, 50, 60, 90, 100, 5000, 22] for i in range(len(N)-1): for j in range(len(N)-i-1): if(N[j] > N[j+1]): # 将i替换为j N[j], N[j+1] = N[j+1], N[j] # 同样替换为j print(N)
运行结果验证
修改后运行会得到正确的排序结果:
[20, 22, 40, 50, 50, 60, 90, 100, 5000, 10000, 80000]
如果你想进一步优化效率,可以加个标志位:当某一轮内层循环没有发生任何交换时,说明数组已经完全有序,可以提前退出循环,减少不必要的遍历:
N = [80000, 20, 40 , 50, 10000, 50, 60, 90, 100, 5000, 22] for i in range(len(N)-1): swapped = False for j in range(len(N)-i-1): if(N[j] > N[j+1]): N[j], N[j+1] = N[j+1], N[j] swapped = True if not swapped: break print(N)
内容的提问来源于stack exchange,提问作者Ns68
相关产品推荐
相关产品推荐

