使用合并排序python的反转计数
我正在实现一个带有反转计数的合并排序。 我的代码可以很好地处理我的小输入文件(10个元素),但当它达到100000时, 它似乎返回了不正确的答案,从野蛮的搜索。有时大,有时小。有人知道吗 我的代码返回2402298631。 输入文件位置使用合并排序python的反转计数,python,sorting,merge,count,inversion,Python,Sorting,Merge,Count,Inversion,我正在实现一个带有反转计数的合并排序。 我的代码可以很好地处理我的小输入文件(10个元素),但当它达到100000时, 它似乎返回了不正确的答案,从野蛮的搜索。有时大,有时小。有人知道吗 我的代码返回2402298631。 输入文件位置 def msort_inv2(m): 全局计数 如果len(m)0)或(len(右)>0): 如果(len(左)>0)和(len(右)>0): 如果左[0]>右[0]: result.append(右[0]) 计数=计数+长度(左) 对。流行音乐(0) 其他:
def msort_inv2(m):
全局计数
如果len(m)0)或(len(右)>0):
如果(len(左)>0)和(len(右)>0):
如果左[0]>右[0]:
result.append(右[0])
计数=计数+长度(左)
对。流行音乐(0)
其他:
result.append(左[0])
左。弹出(0)
elif len(右)>0:
对于右边的我:
结果.追加(i)
对。流行音乐(0)
其他:
对于左边的i:
结果.追加(i)
左。弹出(0)
返回结果
缺陷存在于以下部分
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中出现奇怪的行为。请提供代码的详细说明和比“似乎不正确”(提供输入、预期和实际输出)更好的问题描述。如果您发布了一些代码,可能会有所帮助您的代码是“返回”还是“输出”2402298631?
elif len(right) > 0:
result.extend(right)
right = []
else:
result.extend(left)
left = []