[英]inversion count using merge sort python
我正在實現帶有反轉計數的合並排序。 我的代碼可以在較小的輸入文件(10個元素)中正常工作,但是當達到100000時,似乎從蠻力搜索中返回錯誤答案。 有時更大,有時更小。 有人有主意嗎?
我的代碼返回了2402298631。輸入文件的位置http://spark-public.s3.amazonaws.com/algo1/programming_prob/IntegerArray.txt
def msort_inv2(m):
global count
if len(m) <= 1:
return m
result = []
middle = int(len(m)/2)
left = msort_inv2(m[:middle])
right = msort_inv2(m[middle:])
while (len(left) > 0) or (len(right) > 0):
if (len(left) > 0) and (len(right) > 0):
if left[0] > right[0]:
result.append(right[0])
count = count + len(left)
right.pop(0)
else:
result.append(left[0])
left.pop(0)
elif len(right) > 0:
for i in right:
result.append(i)
right.pop(0)
else:
for i in left:
result.append(i)
left.pop(0)
return result
該錯誤存在於以下部分
elif len(right) > 0:
for i in right: # bug !!!!
result.append(i)
right.pop(0)
else:
for i in left:
result.append(i)
left.pop(0)
更正是這樣的
elif len(right) > 0:
result.extend(right)
right = []
else:
result.extend(left)
left = []
for循環進入數組並同時彈出項目,將在python中引起奇怪的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.