本節討論分治策略在排序中的應用。
歸併排序是遞迴演算法,思路是將資料表持續**為兩半,對兩半分別進行歸併排序。
遞迴的基本結束條件是:資料項僅有乙個資料項,自然是排好序的。
縮小規模:將資料**為相等的兩半,規模減為原來的二分之一;
呼叫自身:將兩半分別呼叫自身排序,然後將分別排好序的兩半進行歸併,得到排好序的資料表。
二、演算法分析
將歸併排序分為兩個過程來分析:**和歸併
**的過程,借鑑二分查詢中的分析結果,是對數複雜度,時間複雜度為o(log n)。
歸併的過程,相對於**的每個部分,其所有的資料項都會被比較和放置一次,所以是線性複雜度,其複雜度是o(n)。
綜合考慮,每次**的部分都進行一次o(n)資料項歸併,總的時間複雜度是o(nlong n)。
最後,我們還注意到兩個切片操作。
為了時間複雜度精確期間,可以通過取消切片操作,改為傳遞兩個**部分的起始點和中指點,也是沒問題的,只是演算法的可讀性會低一點。
我們注意到歸併排序演算法使用了額外1倍的儲存空間用於歸併。這個特性在對特大資料集進行排序的時候要考慮進去。
資料結構 歸併排序
排序 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 ...