所以我正在參加考試,而且這個考試的很大一部分將是快速排序算法。衆所周知,最好的情況下,該算法的實際平均情況是:O(nlogn)
。最壞的情況是O(n^2)
。快速排序的複雜性
至於最壞的情況下,我知道該怎麼解釋呢:它發生時,所選擇的支點將是最小的或數組中的最大價值,那麼我們將有可能需要長達n
時間n
快速排序呼叫(我的意思是分區操作)。我對嗎?
現在是最好的/平均情況。我讀過科爾門書,由於那本書我懂得很多東西,但至於快速排序算法,他專注於關於如何解釋O(nlogn)
複雜性的數學公式。我只是想知道爲什麼它是O(nlogn)
,沒有進入一些數學證明。現在我只看到一些維基百科的解釋,如果我們選擇一個每次將我們的數組分成n/2, n/2+1
部分的數據透視表,那麼我們將有一個深度爲logn
的調用樹,但我不知道這是否是真的,甚至是如果是這樣,那爲什麼logn
呢。
我知道互聯網上有很多涵蓋快速排序的材料,但它們只涵蓋實現,或者只是告訴我複雜性,而不是解釋它。
你知道log2是什麼嗎?你是否理解將剩餘工作與每個遞歸級別分開一半的影響? –
是的,我必須找到一個數字'k',例如'2^k = n' – Frynio
是的,所以如果你走n,n/2,n/4,n/8,...,根據定義,log2(n)項。 – Dukeling