歸併排序及其時間複雜度分析

2021-06-12 09:55:33 字數 908 閱讀 7729

1》歸併排序的步驟如下:

divide: 把長度為n的輸入序列分成兩個長度為n/2的子串行。

conquer: 對這兩個子串行分別採用歸併排序。      

combine: 將兩個排序好的子串行合併成乙個最終的排序序列。

2》時間複雜度:

這是乙個遞推公式(recurrence)

,我們需要消去等號右側的t(n),把t(n)寫成n的函式。其實符合一定條件的recurrence的展開有數學公式可以套,這裡我們略去嚴格的數學證明,只是從直觀上看一下這個遞推公式的結果。當n=1時可以設t(1)=c

1,當n>1時可以設t(n)=2t(n/2)+c

2n,我們取c

1和c2中較大的乙個設為c,把原來的公式改為:

這樣計算出的結果應該是t(n)的上界。下面我們把t(n/2)展開成2t(n/4)+cn/2(下圖中的(c)),然後再把t(n/4)進一步展開,直到最後全部變成t(1)=c(下圖中的(d)):

把圖(d)中所有的項加起來就是總的執行時間。這是乙個樹狀結構,每一層的和都是cn,共有lgn+1層,因此總的執行時間是cnlgn+cn,相比nlgn來說,cn項可以忽略,因此t(n)的上界是θ(nlgn)。

如果先前取c1和c2中較小的乙個設為c,計算出的結果應該是t(n)的下界,然而推導過程一樣,結果也是θ(nlgn)。既然t(n)的上下界都是θ(nlgn),顯然t(n)就是θ(nlgn)。

利用歸併排序求解逆序數及其時間複雜度分析

part 1 問題描述 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在給定乙個序列,其中元素皆為整數 當然,這裡只是為了方便,實際上也可以是其他型別的資料 元素個數未知,要求給出其逆序數。part 2...

常用排序及其時間複雜度

1.選擇排序 不穩定,時間複雜度 o n 2 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2.插入排序 穩定,時間複雜度 o n 2 插入排序的基本思想是,經過i 1遍處理後,...

常用排序及其時間複雜度

1.選擇排序 不穩定,時間複雜度 o n 2 選擇排序的基本思想是對待排序的記錄序列進行n 1遍的處理,第i遍處理是將l i.n 中最小者與l i 交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。2.插入排序 穩定,時間複雜度 o n 2 插入排序的基本思想是,經過i 1遍處理後,...