快速排序Python递归-递归函数如何工作

快速排序Python递归-递归函数如何工作,python,recursion,quicksort,Python,Recursion,Quicksort,所以我理解分区是如何工作的,但是我不理解快速排序函数是如何工作的。这是我在网上找到的代码,但大多数版本都非常相似。快速排序功能如何将整个排序列表拼凑在一起?我不明白当分区生成列表的子集时,return语句如何返回一个完整的排序列表。那么这里的返回值不应该是一个或两个数字吗 我要找的是关于\u quicksort()函数如何一步一步运行的解释。非常感谢任何人的帮助 def partition(xs, start, end): follower = leader = start wh

所以我理解分区是如何工作的,但是我不理解快速排序函数是如何工作的。这是我在网上找到的代码,但大多数版本都非常相似。快速排序功能如何将整个排序列表拼凑在一起?我不明白当分区生成列表的子集时,return语句如何返回一个完整的排序列表。那么这里的返回值不应该是一个或两个数字吗

我要找的是关于
\u quicksort()
函数如何一步一步运行的解释。非常感谢任何人的帮助

def partition(xs, start, end):
    follower = leader = start
    while leader < end:
        if xs[leader] <= xs[end]:
            xs[follower], xs[leader] = xs[leader], xs[follower]
            follower += 1
        leader += 1
    xs[follower], xs[end] = xs[end], xs[follower]
    return follower

def _quicksort(xs, start, end):
    if start >= end:
        return
    p = partition(xs, start, end)
    _quicksort(xs, start, p-1)
    _quicksort(xs, p+1, end)

def quicksort(xs):
    _quicksort(xs, 0, len(xs)-1)
def分区(xs、start、end):
跟随者=引导者=开始
当引线<结束时:
如果xs[leader]=结束:
返回
p=分区(xs、开始、结束)
_快速排序(xs,开始,p-1)
_快速排序(xs,p+1,结束)
def快速排序(xs):
_快速排序(xs,0,len(xs)-1)

这是Lomuto分区方案的一个示例,其中的partition()将输入分离为值。这样做的结果是,将交换值pivot,使其距离最终排序位置的距离小于(末端跟随器),并且pivot(xs[end])将放置在其排序位置。然后它递归地调用左组和右组。一个组的每一级递归都会使该组中的元素更接近其最终排序位置,一旦达到基本情况(0或1个元素),该元素就处于其最终排序位置

您可以这样想,因为数据越来越接近于使用每一级递归进行排序,一旦遍历了整个递归堆栈树,数组就结束了排序

尽管快速排序通常被称为分治方法,但在除法之前,交换更接近其最终排序位置的元素所做的工作是在除法之前完成的,并且一旦除法达到1个元素的基本情况,该元素现在就处于其最终排序位置,并且在返回过程中不会在调用链中执行任何操作

看看


程序如何知道将所有分区拼凑成一个排序列表?@noveler\u programmer9623-我更新了我的答案,以便更好地解释这一点。分区不是“拼凑在一起”的。相反,在一般情况下,每个分区步骤都会将元素交换到更接近其最终排序位置的位置,一旦到达基本情况,至少有一个元素现在处于其最终排序位置。