首页 > 解决方案 > 如何在 Python 中计算冒泡排序中的交换次数

问题描述

def bubSort(numList):
    swapNumber = 0
    for valNum in range(len(numList)-1, 0, -1):
        for valNum2 in range(valNum):
            
            if numList[valNum2+1] < numList[valNum2]:
                
                placeholder = numList[valNum2]
                numList[valNum2] = numList[valNum2 + 1]
                numList[valNum2 + 1] = placeholder
                swapNumber+=1
                print(swapNumber)
                
            print(numList)
    return swapNumber

numList = [7,9,3,1,5,3,2]
bubSort(numList)
print(numList)
print(bubSort(numList)) 

我尝试计算掉期的数量,但我认为它工作不正常。它在执行期间读取 15,但我认为它是 10。

此外,swapNumber 的值由于某种原因没有返回,它显示为 0。

标签: pythonbubble-sort

解决方案


正确的掉期计数:

我认为交换的计数工作正常。

提示:将你的, 放在相同的缩进级别(在 中)print(numList)之后或之前,你会看到所有的步骤。print(swapNumber)if

如果您查看控制台中打印的内容(函数本身的打印指令),它会匹配。

最后返回值0

确实,自从您上次print(bubSort(numValues))打印以来,有些奇怪0......而不是15(您可以在历史上看到!)

问题是您两次调用该函数

bubSort(numList)
print(numList)
print(bubSort(numList)) 

第二次,列表已经排序,所以没有交换发生!

您想保留一次调用函数时的值:

numberOfSwaps = bubSort(numList)
print(numList)
print(numberOfSwaps)

推荐阅读