【发布时间】:2018-11-20 11:58:08
【问题描述】:
我正在尝试使用 def count_inversion 计算反转的总次数
def count_inversion(alist):
count = 0
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid]
righthalf = alist[mid:]
a=count_inversion(lefthalf)
b=count_inversion(righthalf)
i=0
j=0
k=0
track = 0
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i]
i=i+1
else:
alist[k]=righthalf[j]
j=j+1
count+=len(righthalf[i:])
k=k+1
while i < len(lefthalf):
alist[k]=lefthalf[i]
i=i+1
k=k+1
while j < len(righthalf):
alist[k]=righthalf[j]
j=j+1
k=k+1
return count
def main():
alist = [10,9,8,7,6,5,4,3,2,1]
inversion = count_inversion(alist)
print(alist)
print(inversion)
main()
我确实得到了一个排序列表 [1,2,3,4,5,6,7,8,9,10],但是对于反转计数,它显示它是 25 而不是 45。我想我可能会我的代码中有一些错误,但我不知道如何修复它...如果有人可以帮助我将不胜感激...
【问题讨论】:
-
可能要先修复缩进。
-
我认为
count+=len(righthalf[i:])应该有一个 j 而不是 i。另外,track=0 似乎没有必要。 -
啊,忘记删除 track=0,曾经用于计算反转次数。我试着把 count+=len(righthalf [j:], 它显示反转计数是 10...仍然不是 45。
标签: python sorting merge inversion