使用合并排序在python中排序列表

时间:2013-02-05 07:37:12

标签: python sorting mergesort

我这里有一个使用合并排序对列表进行排序的代码..我只是在网上的某个地方...但老实说,我不能按照代码的流程...我的意思是,我无法得到它是如何实现的。我可以理解一些特别是第一个部分,它将整个列表分成两部分,然后对列表的每一侧进行排序。然后什么??你能告诉我这里发生了什么吗?谢谢。 :)

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)  

1 个答案:

答案 0 :(得分:1)

逐行,

if not len(l) or not len(r):  
        return l or r

检查其中一个列表是否为空。如果是,则返回另一个列表。

result = []  
i = j = 0  

此处,resultij已初始化

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

如上所述,样本中的缩进不正确,我已在此处进行了更正。