如何在Python中计算Bubble Sort中的交换数量


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。

正确的Swaps计数:

我认为掉期的计算是正确的。

提示:将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)

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

删除或注释第一个bubsort(numList(函数,然后进行检查,它将返回15,即交换数量。

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

最新更新