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

标签 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

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

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 数组类型的名称,因此使用同名变量会造成混淆。

当您从条件返回时,您不需要将函数的其余部分放在 else block 中。

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)))

关于python - 合并排序实现以按字符串长度排序 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185388/

相关文章:

python - 通过python(或其他一些简单的脚本语言)中的键合并json文件

python - AppEngine 功能在本地开发服务器上工作,但在实时网络服务器上不工作

java - 链表 getValue(int n) 应该是 O(n/2)

java - Java中的归并排序

java - Qucksort 获得 100000 个元素的 StackOverflowError 但 mergesort 在 Java 中没有

python - scipy.optimize curve_fit 返回错误值

python:检查主机名是否已解析

c# - 在类似于 String IndexOf() 的更大 byte[] 中寻找 byte[]?

arrays - 给定一个数字数组,形成一个子集,使其可以表示(允许添加数字)给定数组中的任何数字

c - 合并插入排序如何工作?