2012-02-25 55 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 2012-02-25 22:29:35

回答

8

您merge_sort()函數需要

return result 

末,但事實並非如此。函數默認返回None,這就是爲什麼你會得到錯誤。

2

你忘了在函數的末尾寫上return result。沒有該行,該函數返回None,最終導致len(None)和後續TypeError: object of type 'NoneType' has no len()