簡體   English   中英

合並排序算法失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM