我这里有一个使用合并排序对列表进行排序的代码..我只是在网上的某个地方...但老实说,我不能按照代码的流程...我的意思是,我无法得到它是如何实现的。我可以理解一些特别是第一个部分,它将整个列表分成两部分,然后对列表的每一侧进行排序。然后什么??你能告诉我这里发生了什么吗?谢谢。 :)
def merge(badlist):
if len(badlist) == 1:
return badlist
m = len(badlist)/2
l = merge(badlist[:m])
r = merge(badlist[m:])
if not len(l) or not len(r):
return l or r
result = []
i = j = 0
while (len(result) < len(r) + len(l)):
if l[i] < r[j]:
result.append(l[i])
i += 1
else:
result.append(r[j])
j += 1
if i == len(l) or j == len(r):
result.extend(l[i:] or r[j:])
break
return result
print merge(badlist)
答案 0 :(得分:1)
逐行,
if not len(l) or not len(r):
return l or r
检查其中一个列表是否为空。如果是,则返回另一个列表。
result = []
i = j = 0
此处,result
和i
,j
已初始化
while (len(result) < len(r) + len(l)):
运行while
循环,直到两个列表的所有元素都被复制到result
列表。
if l[i] < r[j]:
result.append(l[i])
i += 1
else:
result.append(r[j])
j += 1
此块检查l[i]
或r[j]
中的哪一个较小,然后将其附加到result
,并推进相应的计数器。这种情况一直持续到列表中的任何一个完全用完为止,这将在以下代码块中进行检查:
if i == len(l) or j == len(r):
result.extend(l[i:] or r[j:])
break
现在,无论哪个列表仍然包含元素,都会按原样附加到result
列表的末尾。
return result
之后返回result
。
如上所述,样本中的缩进不正确,我已在此处进行了更正。