簡體   English   中英

快速排序 Python 遞歸 - 遞歸 function 是如何工作的

[英]Quick Sort Python Recursion - how does the recursive function work

所以我了解分區是如何工作的,但是,我不明白快速排序 function 是如何工作的。 這是我在網上找到的代碼,但是大多數版本都非常相似。 快速排序 function 如何將整個排序列表拼湊在一起? 我不明白當分區生成列表的子集時,return 語句如何返回整個排序列表。 那么這里的返回值不應該是一兩個數字嗎?

我正在尋找的是關於_quicksort() function 如何逐步運行的解釋。 非常感謝任何人的幫助!

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 分區方案的一個示例,partition() 將輸入分隔為 values <= pivot, pivot, values > pivot。 這樣做的結果是值 <= pivot 將被交換,因此它們與最終排序的 position 的距離小於(跟隨開始),值 > pivot 將被交換小於(交換)最終排序的 position 和 pivot (xs[end]) 將放置在排序后的 position 中。 然后它遞歸地調用左右組。 組的每個遞歸級別使該組中的元素更接近其最終排序的 position,一旦達到基本情況(0 或 1 個元素),該元素將在其最終排序的 position 中。

您可以將其視為隨着每個遞歸級別的數據變得更接近排序,並且一旦遍歷整個遞歸堆棧樹,數組最終會排序。

盡管快速排序通常被稱為分而治之的方法,但通過交換更接近最終排序 position 的元素所做的工作是在除法之前完成的,一旦除法達到 1 個元素的基本情況,該元素現在在它的最終排序 position 中,並且在返回調用鏈的過程中沒有做任何事情。

看一眼

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM