递归和合并排序算法

时间:2018-01-25 23:07:34

标签: python algorithm recursion

从未与递归有过良好的关系。所以我需要了解这些脚本中发生了什么。首先,我们有一个“合并脚本”:

def merge(list_1, list_2):
    result = list()

    while len(list_1) > 0 and len(list_2) > 0:
        list_1_item = list_1[0]
        list_2_item = list_2[0]

        if list_1_item <= list_2_item:
            result.append(list_1_item)
            list_1.remove(list_1_item)
        else:
            result.append(list_2_item)
            list_2.remove(list_2_item)
    result.extend(list_1)
    result.extend(list_2)

    return result

该脚本只是按顺序合并两个列表,然后我们有mergesort算法:

def mergesort(input_list):

    if len(input_list) <= 1:
        return input_list
    else:
        input_list_len = len(input_list)
        mid = input_list_len // 2

        left = mergesort(input_list[0:mid])
        #print(left)
        right = mergesort(input_list[mid:input_list_len])
        #print(right)


        return merge(left, right)

现在我有点迷茫,我试图找出一张纸上发生的事情:

在mergesort函数中,最终语句(return merge(left,right))执行了多少次?

如果我打印左右值,我将其作为输出:

[1]
[23]
[1, 23]
[3]
[56]
[8]
[8, 56]
[3, 8, 56]

现在这告诉我:对于我们的第一次执行(给mergesort([1,23,3,56,8])

left = mergesort([1,23])
right = mergesort([3,56,8])

现在我们专注于左侧,mergesort函数运行,我们有:

left = mergesort([1])
right = mergesort([23])

同时我们有:

left = mergesort([3])
right = mergesort([56,8])

现在该功能应该集中在列表[56,8]并给我们:

left = mergesort([56])
right = mergesort([8])

是对的吗?我的问题是:如果函数拆分输入列表,直到我们有一个单项的列表,不应该返回该列表,如if块状态?当最终合并功能开始工作时,他的第一个输入是什么? 我知道我有点困惑.. 非常感谢

0 个答案:

没有答案