快速排序演算法在平均情況下的時間複雜度為 求詳解
阿新 • • 發佈:2019-02-13
時間複雜度為O(nlogn) n為元素個數 1. 快速排序的三個步驟: 1.1. 找到序列中用於劃分序列的元素 1.2. 用元素劃分序列 1.3. 對劃分後的兩個序列重複1,2兩個步驟指導序列無法再劃分 所以對於n個元素其排序時間為 T(n) = 2*T(n/2) + n (表示將長度為n的序列劃分為兩個子序列,每個子序列需要T(n/2) 的時間,而劃分序列需要n的時間) 而 T(1) = 1 (表示長度為1的序列無法劃分子序列,只需要1的時間即可) T(n) = 2^logn + logn * n (n被不斷二分最終只能二分logn次(最優的情況,每次選取 的元素都均分序列)) = n + nlogn 因此T(n) = O(nlogn) 以上是最優情況的推導,因此快速排序在最優情況下其排序時間為O(nlogn),通常平均情況 我們也認為是此值。 在最壞情況下其會退化為氣泡排序,T(n) = T(n - 1) + n (每次選取的元素只能將序列劃分為 一段,即自身是 最小元素或最大元素) 因此T(n) = n * (n-1) / 2 相當於O(n^2)
n被不斷二分最終只能二分logn次 什麼意思?追答
在最優的情況下,即每次二分序列時都將序列平均的分為兩部分,此時n被不斷二分最終只能二分logn次。 即起始為n,第一次分為兩個n/2,第二次分為四個n/4...第m次分為2^m個1, 意思就是在最優的情況下對n進行二分時最多二分m次即會出現2^m個全為1的序列。 所以此時2^m * 1 = n 因此顯然m=logn。 推倒方式如下: T(n) = 2*T(n/2) + n T(n) = 2 * (2 * T(n/4) + n/2) + n ...... T(n) = 2^mT(1) + mn 其中m即等於logn,所以T(n) = nT(1) + nlogn = n + nlogn