Python 排序和运行时错误:比较中超过最大递归深度
我从未学过函数式编程,但我被迫在这个范例中实现自己的排序算法 这是我天真的做法:Python 排序和运行时错误:比较中超过最大递归深度,python,python-3.x,recursion,functional-programming,runtime-error,Python,Python 3.x,Recursion,Functional Programming,Runtime Error,我从未学过函数式编程,但我被迫在这个范例中实现自己的排序算法 这是我天真的做法: def sort(array): def step(idx, array): if idx == len(array)-1: return array if array[idx] > array[idx+1]: return step(0, array[0:idx] + [array[idx+1]] + [array[id
def sort(array):
def step(idx, array):
if idx == len(array)-1:
return array
if array[idx] > array[idx+1]:
return step(0, array[0:idx] + [array[idx+1]] + [array[idx]]
+ array[idx+2:len(array)])
else: return step(idx+1, array)
return step(0, array)
对于大小小于21的阵列,一切正常。但是当len(array)
是21(当然是更大)时,我经常得到,但并不总是,最大递归深度在比较中超过了
我曾尝试过基于Internet的功能性快速排序实现,即使对于百万元素数组,它也非常有效。很明显我做错了什么,但因为我没有函数式编程的经验,我不知道问题出在哪里。有什么帮助吗
快速排序:
def qsort(L):
return (qsort([y for y in L[1:] if y < L[0]]) +
L[:1] +
qsort([y for y in L[1:] if y >= L[0]])) if len(L) > 1 else L
def qsort(L):
返回(qsort([y代表L[1]中的y,如果y=L[0]])如果len(L)>1,则
您并不真的想用Python编写递归排序算法—它本身不支持尾部递归优化,因此堆栈会爆炸—更不用说它的效率非常低。。。你发现的其他Python实现也有吗?我并不真正关心效率,因为这是一个想法。我知道Python并不是解决这些问题的最佳选择。问题在于,功能强大的python快速排序实现非常有效,而对于大于20的数组,我的排序算法崩溃。为什么?我做错了什么?你用什么算法来比较?比较这两种方法是否能给出关键区别的提示?我已将此算法添加到我的问题中。您的算法一旦发现反转,就会递归。您展示的快速排序将数组拆分为两个子数组,然后在两个子数组中递归:递归深度是有限的。您真的不想用Python编写递归排序算法-它本身不支持尾部递归优化,因此堆栈会爆炸-更不用说它非常低效。。。你发现的其他Python实现也有吗?我并不真正关心效率,因为这是一个想法。我知道Python并不是解决这些问题的最佳选择。问题在于,功能强大的python快速排序实现非常有效,而对于大于20的数组,我的排序算法崩溃。为什么?我做错了什么?你用什么算法来比较?比较这两种方法是否能给出关键区别的提示?我已将此算法添加到我的问题中。您的算法一旦发现反转,就会递归。显示的快速排序将数组拆分为两个子数组,然后在两个子数组中递归:递归深度是有限的。