我試圖使用python實現與歸併計數版本計數倒置,這裏是我的代碼:的錯誤結果實施與蟒蛇
def merge(inLeft, inRight):
inversions = 0; output = []
while 0 < len(inLeft) and 0 < len(inRight):
if inLeft[0] < inRight[0]:
output.append(inLeft[0])
inLeft.remove(inLeft[0])
else:
output.append(inRight[0])
inRight.remove(inRight[0])
inversions += len(inLeft)
if len(inLeft) == 0:
output.append(inRight[0])
elif len(inRight) == 0:
output.append(inLeft[0])
return output, inversions
def mergeSort(inList):
length = len(inList)
if length == 1:
return inList, 0
left, s1 = mergeSort(inList[: length//2])
right, s2 = mergeSort(inList[length//2: ])
sortedList, s3 = merge(left, right)
return sortedList, (s1+s2+s3)
我想,當我通過mergeSort([1, 3, 5, 2, 4, 6])
調用它,我會得到([1, 2, 3, 4, 5, 6], 3)
,但實際上我得到([1, 2, 3, 4], 1)
,當我檢查它時,我發現left
數組總是<built-in function sorted>
。
我正在研究分而治之算法,因此不善於分析遞歸問題。問題在哪裏?我該如何解決它?
聽起來好像你的實際代碼使用了一個變量'sorted',它實際上是一個Python中的內置函數。 – quamrana
@quamrana我再次檢查了代碼,確實有一個變量'sorted',但存在於另一個不參與該過程的函數中。更新了代碼,現在顯示的是完整的腳本。 –