我已经实现了我认为是蟒蛇合并排序算法。我从来没有在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)

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

有帮助吗?

解决方案

不要将其命名变量“列表”。这是Python的阵列类型的名称,因此,使用由相同的名称的变量是混乱的。

当你从一个有条件的回报,你不需要sitck功能的其余部分在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或排序()。

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

其他提示

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

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

my_strings = ["hello", "foo", "bar", "spam"]
print sorted(my_strings, len_cmp)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top