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

一方、これが私の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)

助けてくれてありがとう!:)

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 に答える