递归函数解释了python(这部分在做什么?)


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"的数字(我有一个defcreate_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

。。。然后它会一次又一次地分裂它,直到只有一个可以比较。

是的,因为在某个时候,在将列表减半(和减半,和减半…(后,它将调用merge_sort,其中只有一个项目的列表。

这个函数做的第一件事是:

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

也就是说,只返回一个项目的列表(而不是减半(。

最新更新