開始學資料結構 (四) 歸併排序

2021-06-21 12:55:12 字數 944 閱讀 1584

/*

歸併排序。 思路很簡單,就是不斷的將要排序的陣列進行分割,然後直到只有乙個數的時候,那麼這個時候就是已經排好序的了。 然後將這兩部分數存放在不同的兩個陣列中,兩邊都從最小的部分開始往外讀,回歸到排序陣列中即可。    

sq 2014.4.14

*/#include

int aa[10]=;

void merge(int start , int mid , int end)    

}for (; i < n1; i ++)

for(; j < n2 ; j++)        

}//開始寫分割函式

void sort(int start ,int end )

}int main()

分析時間複雜度:

這是乙個遞推公式(recurrence),我們需要消去等號右側的t(n),把t(n)寫成n的函式。其實符合一定條件的recurrence的展開有數學公式可以套,這裡我們略去嚴格的數學證明,只是從直觀上看一下這個遞推公式的結果。當n=1時可以設t(1)=c1,當n>1時可以設t(n)=2t(n/2)+c2n,我們取c1和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)。

空間複雜度的話顯然是o(n).因為這裡只需要乙個陣列來存放左右兩部分資料。

資料結構 歸併排序

排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...

資料結構 歸併排序

歸併排序,即merge sort,通過遞迴式的merge操作 merge即歸併 實現排序。演算法思想是分治思想 divide and conquer 歸併排序一般是遞迴實現的 時間複雜度o nlgn 遞迴都是一去一回,去的時候divide,回的時候conquer。表達欠提煉 1 divide,分 遞...

資料結構 歸併排序!!!

歸併排序 整體思想 將資料分成很多的部分,每次排序資料的一部分,然後將兩部分的資料進行整體排序,這樣一步一步將整體資料排序。如圖 注 將需要排序的資料進行分塊,當每個塊的資料足夠的少的時候就可以進行效率高的排序方法,當兩塊資料排序好的時候就可以將兩塊排序好的資料進行合併。具體實現方法 ifndef ...