2016-03-17 59 views
1

我试图创建Python中的插入排序功能,我不能真正理解什么是错的..递归在python,如插入排序

我知道,当我再次调用该函数,Python不删除上次函数运行时,如何在调用下一个函数时转储当前函数? (当我呼吁“回归”的功能)

我也注意到,对于小名单(60 + - ),它运行良好,但对于大名单也没有..

谢谢!

def insertsort(lst,k=1): 
    for i in range(len(lst)-k): 
     if lst[i] > lst[i+k]: 
      lst[i],lst[i+k]=lst[i+k],lst[i] 
      return insertsort(lst) 
    return None 
+0

你是不是指最后一行的'return lst'? – cdonts

+0

不,它的原地.. –

+0

为什么你想实现插入排序递归?它的主要用途是对少量数据进行简单,轻量级的稳定排序。这是一个功课问题吗?只是为了自己的缘故练习递归? –

回答

0

我不会用递归来实现这个算法。

def insertsort(lst): 
    for i in range(1, len(lst)): 
     for j in range(i): 
      if lst[i] < lst[j]: 
       lst.insert(j, lst.pop(i)) 
       break 
    return lst 

测试:

>>> insertsort([6, 5, 3, 1, 8, 7, 2, 4]) 
[1, 2, 3, 4, 5, 6, 7, 8] 

希望这有助于!

+0

是的,我做了一个while while(在第一个for循环,在最坏的情况下效率相同),但如果我拿一个例如一个40长度的列表,递归一个明显更快.. 我欣赏答案,但我想知道递归是否可能 谢谢! –