0

我已经实现了我认为是 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

同时,这是我的合并排序方法:

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)

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

4

2 回答 2

3

不要将变量命名为“列表”。这是 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)))
于 2009-07-26T20:04:39.930 回答
2

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

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

my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)
于 2009-07-26T20:06:02.457 回答