我试图使用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',但存在于另一个不参与该过程的函数中。更新了代码,现在显示的是完整的脚本。 –