定义名为sort
的递归函数;它通过任何无序列表;它返回一个新列表(不改变参数),该列表包含参数列表中的每个值,但是以非降序排列。
例如,调用sort([4,5,3,1,6,7,2])
会在列表[4,5,3]
和[1,6,7,2]
上递归调用排序,分别返回列表[3,4,5]
和[1,2,6,7]
,这些列表在合并时将返回列表[1,2,3,4,5,6,7]
。
注意当列表的长度是偶数时,两个子列表都将具有相同的长度 尺寸;当列表的长度为奇数时,将其分成两个列表是很自然的,第一个列表的值比第二个列表少。
该功能如下所示:
def sort(l):
我知道如何将l分成两个列表,例如[4,5,3,1,6,7,2]
,我将它们分为[4,5,3]
和[1,6,7,2]
。但是当sort函数只有一个参数l时,我真的不知道如何递归排序每一半。
有人可以告诉你这样做吗?谢谢。
答案 0 :(得分:0)
我试了一下它似乎有效。就像TobiasR说的那样,它是一种合并类型。如果您想要更好地解释它的工作原理,我可以查看this video on merge sorts by Harvard University。 无论如何,这是它的代码:
def sort(l):
if len(l)==2:
if l[0]<l[1]:
return l #return list as it is
return l[::-1] #return reversed list
elif len(l)==1:
return l
l_1=sort(l[:len(l)//2]) # cut the list in half
l_2=sort(l[len(l)//2:])
l_out=[]
while True:
if not l_1: #check l1 isn't empty
l_out+=l_2
break;
elif not l_2: #check l2 isn't empty
l_out+=l_1
break;
if l_1[0]<l_2[0]: #put the smallest item in the list
l_out.append(l_1.pop(0))
else:
l_out.append(l_2.pop(0))
return l_out