需要帮助将我的头围绕快速排序的一种实现

时间:2019-05-23 17:05:21

标签: python python-3.x quicksort

我对python还是很陌生,并且一直在尝试自学。自从我了解排序算法以来,我一直在尝试着围绕它们,特别是快速排序。我在stackoverflow上找到了quicksort的实现,但其中的一个部分尤其使它感到困惑。

“返回快速排序(较小)+等于+快速排序(较大)”是如何工作的?如果快速递归调用quicksort(),那么每次函数初始化时,总是不会清除较小,相等和较大的数组吗? python如何准确记住有组织的数组? python如何知道停止此递归?

代码源:Quicksort with 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

2 个答案:

答案 0 :(得分:1)

该函数每次调用都会创建3个新数组。尽管它们具有相同的名称,但是它们实际上是不同的,因为递归调用将函数的所有本地数据(而不只是参数)都放在了堆栈上。

因此,函数调用自身时,上一次调用的3个数组不会丢失。

答案 1 :(得分:1)

递归在内存(堆栈框架)中创建函数的新实例,包括变量。正确的是,这些列表已由函数清除,但在初始实例中并未清除。该函数以递归方式萌芽新分支,并且只有在后续实例完成,关闭并返回其贡献后,才会关闭初始实例。