小编ImN*_*ing的帖子

什么时候会使用递归合并排序而不是迭代?

是否存在应该使用递归合并排序而不是迭代合并排序的情况?最初,我认为合并排序的迭代方法通常更快,尽管我无法在自己的实现中证明这一点。但是递归会对堆栈进行更多的调用,这反过来又降低了内存效率。如果我有一个非常大的数据集需要排序怎么办?那么使用递归不是很糟糕吗?因为过度深度的递归最终不会导致堆栈溢出吗?如果递归速度较慢且内存效率较低,为什么还要使用递归而不是迭代呢?

def merge_sort(arr):
    if len(arr) <= 1:
        return arr

    current_size = 1
    while current_size < len(arr):
        left = 0
        while left < len(arr)-1:
            mid = left + current_size - 1
            right = min((left + 2*current_size - 1), (len(arr)-1))
            merged_arr = merge(arr[left : mid + 1], arr[mid + 1 : right + 1])
            for i in range(left, right + 1):
                arr[i] = merged_arr[i - left]
            left = left + current_size*2
        current_size = current_size * 2
    return arr

def merge(left, right):
    result …
Run Code Online (Sandbox Code Playgroud)

python sorting algorithm

2
推荐指数
1
解决办法
241
查看次数

标签 统计

algorithm ×1

python ×1

sorting ×1