快速排序時間複雜度分析

2021-07-15 04:16:49 字數 609 閱讀 8605

為了分析快速排序的時間複雜度,請先看下面的主定理:

主定理: t [n] = at[n/b] + f (n)

其中 a >= 1 and b > 1 是常量 並且 f (n) 是乙個漸近正函式, 為了使用這個主定理,您需要考慮下列三種情況:

快速排序的每一次劃分把乙個 問題分解成兩個子問題,其中的關係可以用下式表示:

t[n] = 2t[n/2] + o(n) 其中o(n)為partition()的時間複雜度,對比主定理,

t [n] = at[n/b] + f (n)

我們的快速排序中:a = 2, b = 2, f(n) = o(n)

那麼為什麼還有最壞情況呢?

考慮如下極端情況,

t[n] = t[n-1] + t[1] + o(n),

問題來了,這一次的劃分白玩了,劃分之後一邊是乙個,一邊是n-1個,這種極端情況的時間複雜度就是o(n2).

歸併排序時間複雜度分析

主要參考了他的博文,他還講解了其他排序的時間複雜度分析及演算法實現。可以說合併排序是比較複雜的排序,特別是對於不了解分治法基本思想的同學來說可能難以理解。總時間 分解時間 解決問題時間 合併時間。分解時間就是把乙個待排序序列分解成兩序列,時間為一常數,時間複雜度o 1 解決問題時間是兩個遞迴式,把乙...

歸併排序時間複雜度分析

歸併 public void static main int leftarray newint num 2 public void static sort int begin,int end,int array,int leftarray public void static merge int b...

氣泡排序 時間複雜度與空間複雜度

外迴圈是遍歷每個元素,每次都放置好乙個元素 內迴圈是比較相鄰的兩個元素,把大的元素交換到後面 等到第一步中迴圈好了以後也就說明全部元素排序好了 實現 include 列印陣列元素 void print array int array,int length printf n n void bubble...