[英]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.