合並排序算法時間復雜度分析


一、合並已排序的兩個數組,依次比較兩個數組元素大小,並按大小加入到暫存數組B,最后保存到A:

Algorithm: MERGE(A, p, q, r)

輸入:數組A[p...q]和A[q+1...r],各自按升序排列

輸出:將A[p...q]和A[q+1...r]合並后的升序排序的新數組

01. s←p; t←q+1; k←p; {s, t, p 分別指向A[p...q], A[q+1...r]和暫存數組B}

02. while s≤q and t≤r

03.   if A[s] ≤A[t] then

04.     B[k]←A[s]

05.     s ←s+1

06.   else

07.     B[k]←A[t]

08.     t←t+1

09.   end if

10.   k←k+1

11.end while

12. if s=q+1 then B[k...r] ←A[t...r]

13. else B[k...r] ←A[s...q]

14. end if

15. A[p...r] ←B[p...r]

 

二、對數組進行排序(分治策略):

Algorithm: MERGESORT(A[low…high])

輸入:待排序數組A[low,...high]

輸出:A[low…high]按非降序排列

01. if low<high then

02.   mid←[(low+high)/2]

03.   MERGESORT(A, low, mid)

04.   MERGESORT(A, mid+1, high)

05.   MERGE(A, low, mid, high)

06. end if

 

三、時間復雜度分析:

1. 最小比較次數:

  n = 1時,C(n) = 0;

  n >= 2時,C(n) = 2C(n/2) + n/2,理想情況下,MERGE算法進行比較次數,最少為與子數組長度相等。此時其中一個子數組先全部依次進入暫存數組B,然后另一個子數組直接全部加入B。

結果:C(n) = (nlogn)/2

2. 最大比較次數:

  n = 1時,C(n) = 0;

  n>= 2時,C(n) = 2C(n/2) + n-1,理想情況下,MERGE算法進行比較次數,最大為總長度 - 1。此時兩個子數組的元素輪流加入暫存數組B,因此共比較n - 1次。

結果:C(n) = nlogn - n + 1

綜合1和2得,合並排序算法時間復雜度為T(n) = Θ(nlogn)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM