获取错误:
File "inversions.py", line 26, in merge
if left[i] < right[j]:
TypeError: 'int' object is not subscriptable
我的合并排序实现就是这样;接受一个列表及其长度。基本情况是当length为1时,我只返回列表(不是作为int,而是作为列表):
def mergesort(arr, length):
if length == 1:
return arr
在非基本情况下使用合并排序功能:
n = length // 2
left = arr[:n]
right = arr[n:]
lsort = mergesort(left, len(left))
rsort = mergesort(right, len(right))
result = merge(lsort, rsort, length)
return result
然后有合并函数来合并两个已排序的子列表,定义如下:
def merge(left, right, length):
buff = []
i = j = count = 0
在完成所有递归调用之后,合并排序函数显然会调用此合并函数。
此合并函数中有if-else语句处理它的工作:
if left[i] < right[j]:
buff.append(left[i])
i += 1
if i == len(left):
for j in range(j, len(right)):
buff.append(right[j])
break
elif left[i] > right[j]:
buff.append(right[j])
j += 1
count += len(left) - i
if j == len(right):
for i in range(i, len(left)):
buff.append(left[i])
break
最后,这个合并函数返回&#39; count&#39 ;;倒数。
从错误来看,似乎“离开了”。等被解释为整数,从而给我下标错误。但是我明白他们是什么时候才能明白他们应该是名单(或者我可能只是错过了一些非常明显的东西)。
我无法理解这一点。任何和所有的帮助表示赞赏! :)
答案 0 :(得分:0)
我已经看到了您的代码,并且在merge
函数中,您将返回类型为count
的变量int
,然后再将其作为数组传递给merge
递归。
因此块if left[i] < right[j]:
将不起作用。
更改merge
函数以返回buff
变量。