递归函数解释python(这部分是做什么的?)[重复]。

问题描述 投票:-1回答:1
def merge_sort(a):
    if len(a)<=1:
        return a
    left = merge_sort(a[:len(a)//2])
    //print('this is left step {}'.format(left))
    right = merge_sort(a[len(a)//2:])
    //print('this is right step {}'.format(right))
    return merge(left, right)

我明白代数递归函数,我明白它是如何工作的。

我不明白的是如何 merge_sort(a[len(a)//2:])从传入的名为'a'的列表中只得到一个数字(我有一个def create_random_array传入随机数字列表)。

我的想法是,它将首先把列表一分为二--我可以在我的打印函数中看到,然后它将再次将其分割,再分割,直到只有一个可以比较的数字。

如何 merge_sort(a[len(a)//2:]) 工作

其他部分的代码,可能对理解我的混乱有所帮助。


def create_array(size = 5, max = 10):
    from random import randint
    return [randint(0,max) for _ in range(size)]



def merge(a,b):
    c = []
    a_idx = 0
    b_idx = 0
    print(a[a_idx])
    print(b[b_idx])
    while a_idx<len(a) and b_idx<len(b):
        if a[a_idx]<b[b_idx]:
            c.append(a[a_idx])
            a_idx+=1
        else:
            c.append(b[b_idx])
            b_idx+=1
    if a_idx==len(a):
        c.extend(b[b_idx:])
    else:
        c.extend(a[a_idx:])
    return c
python recursion big-o array-merge
1个回答
0
投票

.......然后它将再次拆分,再拆分,直到只有一个可以比较。

是的,因为在某些时候,在将你的列表减半(再减半,再减半......)之后,它将调用 merge_sort 只有一个项目的列表。

而该函数做的第一件事就是这样。

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

就是说,一个只有一个项目的列表被原样返回(而不是减半)。

© www.soinside.com 2019 - 2024. All rights reserved.