快速排序時間復雜度分析:
數組長度為n
1,平均復雜度:
t(n) = cn + 2t(n/2)
= cn + 2(cn/2 + 2t(n/4)) = 2cn + 4t(n/4)
= 2cn + 4(cn/4 + 2t(n/8)) = 3cn + 8t(n/8)
= icn + 2^i * t(n/(2^i))
當 2^i = n時, i = logn, 排序結束,
t(n) = cnlogn + n*t(1) = o(nlogn)
2,最壞復雜度:
在完全有序的情況下[比如從小到大有序]
i從開始,j從末尾向中間移動,選第一個元素a[0]為key,
i找第一個比key大的元素,a[1]符合條件,停止移動。
j找第一個比key小的元素,直到a[1]都沒找到,停止移動
判斷 key < a[1]不交換,
數組被划分為兩部分 a[0]和 a[1]~a[n]
如此,以后每次划分都只能划掉一個元素,由此,時間復雜度推導如下:
t(n) = cn + t(n-1) = cn + c(n-1) + t(n-2) ....
= cnn -ck + t(1) = cn^2 = 0(n^2)
冒泡排序的時間復雜度分析:
第一個元素:cn
第i個元素: cn
第n個元素: cn
總:n*cn = o(n^2)
參考文章如下: