合并排序实现按字符串长度排序 - python

时间:2009-07-26 19:50:35

标签: python algorithm mergesort

我已经实现了我认为是python中的合并排序算法。我以前从未在Python中编程,因此我使用了几个资源,这些命令对我来说似乎很陌生,以便更好地理解。

但是,我也从来没有实现过合并排序,所以我不确定我是否已经正确实现了它。任何指导,提示或更正将不胜感激。

这是我的合并方法:

def merge(left, right):
    result = []
    i, j = 0, 0
    while(i < len(left) and j< len(right)):
        if(len(left[i]) <= len(right[j])): 
            print(i)
            result.append(left[i])
            i=i+1
        else:
            result.append(right[j])
            j=j+1

    result += left[i:]
    result += right[j:]
    return result

同时,这是我的mergesort方法:

def mergesort(list):
    if len(list) < 2:
        return list
    else:
        middle = len(list) / 2
        left = mergesort(list[:middle])
        right = mergesort(list[middle:])
        return merge(left, right)

感谢您提供任何可能的帮助! :)

2 个答案:

答案 0 :(得分:3)

不要将变量命名为“list”。这是Python的数组类型的名称,因此使用同名的变量会令人困惑。

当你从条件中返回时,你不需要在else块中使用该函数的其余部分。

def mergesort(list):
    if len(list) < 2:
        return list
    middle = len(list) / 2
    left = mergesort(list[:middle])
    right = mergesort(list[middle:])
    return merge(left, right)

总的来说,这看起来很合理。

当然,除了练习之外,你应该使用list.sort或sorted()。

a = ["abc", "de", "f", "ghijkl"]
print sorted(a, lambda a,b: cmp(len(a), len(b)))

答案 1 :(得分:2)

如何使用sorted()功能?像这样:

def len_cmp(x, y):
    return len(x) - len(y)

my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)