2012-02-25 8 views
-1

マージソートを作成しようとしています。Pythonでマージソートに問題がありますか?

ここで問題は何ですか?私は任意のリソースを参照せずにそれを実装しようとしていると私のコードを説明するためにStackoverflowの力のいくつかの愚かなルール以来、この行を不必要に書く。

def merge_sort(A): 
    if len(A) <= 1: 
     return A 

    #split list in 2 
    mid = len(A)/2 
    B = A[:mid] 
    C = A[mid:] 

    B = merge_sort(B) 
    C = merge_sort(C) 

    #merge 
    result = [] 
    while len(B) > 0 and len(C) > 0: 
     if B[0] > C[0]: 
      result.append(C.pop(0)) 
     else: 
      result.append(B.pop(0)) 

    if len(B) > 0: 
     result.extend(merge_sort(B)) 
    else: 
     result.extend(merge_sort(C)) 



print merge_sort([8, 2, 1, 1, 4, 45, 9, 3]) 

私はこのエラーを取得する:

Traceback (most recent call last): 
    File "merge_sort.py", line 31, in <module> 
    print merge_sort([8, 2, 1, 1, 4, 45, 9, 3]) 
    File "merge_sort.py", line 11, in merge_sort 
    B = merge_sort(B) 
    File "merge_sort.py", line 16, in merge_sort 
    while len(B) > 0 and len(C) > 0: 
TypeError: object of type 'NoneType' has no len() 
+4

-1 "ダムルール"コメント。 – senderle

答えて

8

あなたmerge_sort()関数は、最後に

return result 

する必要があるが、それはしません。関数はデフォルトでNoneを返すので、エラーが発生します。

2

機能の最後にreturn resultと忘れてしまった。その行がなければ、関数はNoneを返し、最終的にはlen(None)になり、その後はTypeError: object of type 'NoneType' has no len()になります。

関連する問題