我对python还是很陌生,并且一直在尝试自学。自从我了解排序算法以来,我一直在尝试着围绕它们,特别是快速排序。我在stackoverflow上找到了quicksort的实现,但其中的一个部分尤其使它感到困惑。
“返回快速排序(较小)+等于+快速排序(较大)”是如何工作的?如果快速递归调用quicksort(),那么每次函数初始化时,总是不会清除较小,相等和较大的数组吗? python如何准确记住有组织的数组? python如何知道停止此递归?
def quicksort(array):
lesser = []
equal = []
greater = []
if len(array) > 1:
p = array[0]
for x in array:
if x < p:
lesser.append(x)
elif x == p:
equal.append(x)
elif x > p:
greater.append(x)
return quicksort(lesser)+equal+quicksort(greater) # ???
else:
return array
答案 0 :(得分:1)
该函数每次调用都会创建3个新数组。尽管它们具有相同的名称,但是它们实际上是不同的,因为递归调用将函数的所有本地数据(而不只是参数)都放在了堆栈上。
因此,函数调用自身时,上一次调用的3个数组不会丢失。
答案 1 :(得分:1)
递归在内存(堆栈框架)中创建函数的新实例,包括变量。正确的是,这些列表已由函数清除,但在初始实例中并未清除。该函数以递归方式萌芽新分支,并且只有在后续实例完成,关闭并返回其贡献后,才会关闭初始实例。