如何在 Python 中计算冒泡排序中的交换次数

How to count number of swaps in Bubble Sort in 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。

掉期的正确计数:

我认为交换计数正常。

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

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

Return最后的值为0

自从你上次 print(bubSort(numValues)) 打印 0 而不是 15 之后确实有些奇怪(你可以在历史中看到!)

问题是你调用了两次函数

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

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

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

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

您的 bubSort 函数正在 returning 值,它是正确的。 问题是,您在同一个数组上两次调用 bubSort 函数,并且由于第一个数组已经对数组进行了排序,所以当您打印(bubSort(numList))时它 returns 0.

删除或注释第一个 bubsort(numList) 函数,然后检查,它会 return 你 15,交换次数。

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