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



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

我想要的是对_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)

这是Lomuto分区方案的一个例子,are partition((将输入分隔为值<=枢轴,枢轴,值>枢轴。这样做的结果是,值<=pivot将被交换,使其与最终排序位置的距离小于(follower start(,values>pivot会被交换,从而使其与最后排序位置的间距小于(end follower(,pivot(xs[end](将被放置在其排序位置。然后它递归地为左组和右组调用自己。一个组的每一级递归都会使该组中的元素更接近其最终排序位置,一旦达到基本情况(0或1个元素(,该元素就处于其最终排序的位置。

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

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

看看

https://en.wikipedia.org/wiki/Quicksort#Algorithm

https://en.wikipedia.org/wiki/Quicksort#Lomuto_partition_scheme

最新更新