我正在尝试使用Python计算长文本文件中的反转次数。我一直在left = sortCount(alist, len1, i)
import csv
def mergeCount(alist, i, len1, len2):
print("Merge")
inv = 0
temp = []
index1 = i
index2 = i + len1
while index1 < i + len1 and index2 < i + len1 + len2:
if alist[index1] <= alist[index2]:
temp.append(alist[index1])
index1 += 1
else:
temp.append(alist[index2])
index2 += 1
inv += i + len1 - index1
if index2 == i + len1 + len2:
temp.extend(alist[index1 : i + len1])
else:
pass
write = i
for value in temp:
alist[write] = value
write += 1
return inv
def sortCount(alist, n, i=0):
#print("Sort")
if len(alist) <= 1:
return 0
else:
len1 = n // 2
len2 = n // 2 + n % 2
left = sortCount(alist, len1, i)
right = sortCount(alist, len2, i + len1)
mergeInv = mergeCount(alist, i, len1, len2)
return left + right + mergeInv
def safeint(val):
try:
return int(val)
except ValueError:
return val
alist = []
with open('IntegerArray.txt') as f:
lines = csv.reader(f, delimiter='\n')
for line in lines:
line = map(safeint, line)
alist.append(line)
print sortCount(alist, len(alist), 0)
答案 0 :(得分:1)
当len1
变为zero
时,您会一次又一次地呼叫left = sortCount(alist, 0, i)
同样的事情。
如果len1==0
返回0
if len1==0:
return 0
left = sortCount(alist, len1, i)
right = sortCount(alist, len2, i + len1)
修改你的sortCount
如下:
def sortCount(alist, n, i=0):
if len(alist) <= 1:
return 0
else:
len1 = n // 2
len2 = n // 2 + n % 2
if len1==0:
return 0
left = sortCount(alist, len1, i)
right = sortCount(alist, len2, i + len1)
mergeInv = mergeCount(alist, i, len1, len2)
return left + right + mergeInv