2014-02-18 65 views
-2

下面的內容適用於用Python編寫的合併排序。它拋出一個錯誤「RuntimeError:超過最大遞歸深度」。如果我錯過了結束遞歸的邏輯,請讓我知道。使用遞歸合併Python中的排序代碼

list=[] 
    list1=[] 
    list2=[] 
    def merge(list,list1,list2): 

    for k in range(1,len(list1)+len(list2)): 
    i=1 
    j=1 
    if list1[i]>list2[j]: 
     list[k]=list2[j] 
     j=+1 
     k=+1 
    else: 
     list[k]=list2[i] 
     i=+1 
     k=+1 


    def split(list,list1,list2): 
if len(list)<>1: 
    list1=list[:len(list)/2] 
    list2=list[len(list)/2:] 
return 


    def sort(list): 
     split(list,list1,list2) 
     sort(list1) 
     sort(list2) 
     merge(list,list1,list2) 


     list = [15,8,59,69,45,23] 
     sort(list) 
+0

不要將其命名對象'list'或'sort'。它們是內置的,你在遮蔽它們(這意味着你不能再使用內置的,因爲它被覆蓋)。我們其他人很難遵循 – mhlester

+0

@ mhlester:'sort'沒問題。這是一種方法。它被「分類」,如果你影子它會導致問題。 – user2357112

+0

抱歉當然你是對的。我只是不喜歡這樣一個平淡的名字 – mhlester

回答

2

試試這個程序:

def sort(aList): 
     aList = _mergesort(aList, 0, len(aList) - 1) 
     return aList 

def _mergesort(aList, first, last): 
    mid = (first + last)/2 
    if first < last: 
    _mergesort(aList, first, mid) 
    _mergesort(aList, mid + 1, last) 

    a, f, l = 0, first, mid + 1 
    tmp = [None] * (last - first + 1) 

    while f <= mid and l <= last: 
    if aList[f] < aList[l] : 
     tmp[a] = aList[f] 
     f += 1 
    else: 
     tmp[a] = aList[l] 
     l += 1 
    a += 1 

    if f <= mid : 
    tmp[a:] = aList[f:mid + 1] 

    if l <= last: 
    tmp[a:] = aList[l:last + 1] 

    a = 0 
    while first <= last: 
    aList[first] = tmp[a] 
    first += 1 
    a += 1 
    return aList 

aList = [15,8,59,69,45,23] 
print sort(aList) 
1

避免全局變量的初始化在這個腳本

>>> x = 5 
>>> def show2(): 
...  x = 42 
...  print x 
... 
>>> show2() 
42 
>>> x 
5 

的問題是,你遞歸調用自己使用相同的參數,保證無限遞歸。無論您設置遞歸限制有多高都無關緊要;你不能把它過去的無窮*

+0

是的。明白了。但是,如何在不定義變量的情況下使用變量?我是Python的初學者。我張貼的部分新的代碼和 DEF分裂(SEQ,SEQ1,SEQ2): \t SEQ1 = SEQ [:LEN(SEQ)/ 2] \t SEQ2 = SEQ [長度(SEQ)/ 2:] \t打印SEQ,SEQ1,SEQ2 \t返回\t OUTPUT:[15,8,59,69,45,23] [15,8,59] [69,45,23] [] [] [] [] [ ] [] [] [] [] – Arighna

+0

好吧,我添加了合併排序的新程序。希望它會有幫助。 – user3273866