歸併排序演算法的時間複雜度

2021-09-25 03:55:08 字數 622 閱讀 8911

來自教程:

我們對n個元素進行歸併排序,需要時間t(n),

那分解成兩個子陣列排序的時間都是t(n/2)。

merge()函式合併的時間複雜度是o(n)。

歸併排序的時間複雜度計算公式是:

t(1) = c;   n=1 時,只需要常量級的執行時間,所以表示為 c。

t(n) = 2*t(n/2) + n; n>1

如何求t(n)?

我們對t(n/2)一級一級分解:

t(n) = 2*t(n/2) + n

= 2*(2*t(n/4) + n/2) + n = 4*t(n/4) + 2*n

= 4*(2*t(n/8) + n/4) + 2*n = 8*t(n/8) + 3*n

= 8*(2*t(n/16) + n/8) + 3*n = 16*t(n/16) + 4*n

......

= 2^k * t(n/2^k) + k * n

......

可以看出:當

求出

而且歸併排序的演算法跟有序度無關,所以時間複雜度很穩定都是o(nlogn);

排序演算法 歸併排序的時間複雜度分析

歸併排序,其實就是遞迴 合併。歸併排序將陣列取中間分為兩部分,兩個子陣列分別各自再從中間分為兩個子陣列,一直分下去直到不能再分。分完之後,再按照子陣列大小合併為為乙個有序陣列,然後層層向上合併,直到合併為乙個有序的陣列。文字描述不理解的話,使用一副圖來解釋下 其實歸併排序的思想很簡單,圖中也描述的很...

歸併排序時間複雜度分析

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