合并排序算法失败

时间:2014-01-26 05:56:46

标签: python python-2.7 segmentation-fault

我在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)

1 个答案:

答案 0 :(得分:3)

看起来你有堆栈溢出。 merge使用堆栈空间按照要合并的列表大小的顺序,这比Python可以处理的方式更多。通常情况下,Python会在你到达那一点之前用RuntimeError阻止你;您可能使用sys.setrecursionlimit超过了安全限制。停止使用setrecursionlimit,并重写merge以不使用递归。