[英]Merge Sort Algorithm fail
我在python中編寫了歸並排序算法。 它可以完美地工作到10000個數字,但是在10000個數字之后會給我分段錯誤11。這可能是什么問題? 關於它的任何想法
def merge_count(arr):
if len(arr) < 2:
return (arr, 0)
m = int(len(arr) / 2)
left, l_counter = merge_count(arr[:m])
right, r_counter = merge_count(arr[m:])
return merge(left, right, l_counter + r_counter)
def merge(left, right, counter):
if len(left) * len(right) == 0:
return (left + right, counter)
if left[len(left) - 1] > right[len(right) - 1]:
val = left.pop(len(left) - 1)
counter += len(right)
else:
val = right.pop(len(right) - 1)
arr, counter = merge(left, right, counter)
return (arr + [val], counter)
看來您有堆棧溢出。 merge
以列表大小的順序使用堆棧空間進行合並,這比Python可以處理的更多。 通常,Python在達到這一點之前會通過RuntimeError
阻止您; 您可能使用了sys.setrecursionlimit
來超過安全限制。 停止使用setrecursionlimit
,並重寫merge
以不使用遞歸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.