2014-02-18 64 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