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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:47:53