【发布时间】:2021-10-28 22:18:36
【问题描述】:
我正在尝试计算合并排序算法中的反转次数。除了为条件添加一个计数器以在右侧的值小于左侧的值时翻转值之外,我没有进行很多修改。我正在使用的代码如下,它甚至可以在 pythontutor.com 上打印正确的答案,但也会产生错误。我无法理解的是错误的来源。这里有人能解释一下我没有看到什么吗?我的代码和错误如下:
def merge(left,right):
result=[]
i,j=0,0
count=0
while (i<len(left)) and (j<len(right)):
if left[i]<right[j]:
result.append(left[i])
count+=1
i+=1
else:
result.append(right[j])
j+=1
while (i<len(left)):
result.append(left[i])
i+=1
while (j<len(right)):
result.append(right[j])
j+=1
# print(count)
return result,count
def merge_sort(list):
if len(list)<2:
return list
else:
middle=len(list)//2
left=merge_sort(list[:middle])
right=merge_sort(list[middle:])
# return merge(left,right)
result,count=merge(left,right)
print(result,count)
merge_sort([2,3,9,2,9])
我得到的错误是:
TypeError: object of type 'NoneType' has no len()
【问题讨论】:
-
我认为缩进是错误的。可能在复制过程中出了点问题。
-
是的,缩进不是问题。 Stackoverflow 只是不允许我在复制时缩进代码。
标签: python algorithm mergesort divide-and-conquer