歸併排序:是採用分治法(divide and conquer)。
它的主要思想就是把兩個陣列(各個一定要有序),歸併在乙個陣列中。
如乙個陣列要求用歸併進行排序,主要要考慮試實現兩個部分:
(1)「分解」——如何將乙個大的陣列逐步分成多個小的有序陣列。
(2)「合併」—— 如何將兩個有序列表並成乙個適當的陣列。
則可以兩種進行歸併:
1. 自頂而下的歸併排序
2. 自底而上的歸併排序
核心**:
//歸併
public
static
void
merge(comparablea , int lo, int mid, int hi)
//在輔助陣列aa中分 左 中 右引索。
int i = lo;//左半開始
int j = mid +1;//由半開始
//其實是對對應的資料lo--hi索引元素拷貝
for(int k =lo; k<=hi; k++)
}
歸併中,比較複製的陣列示意圖:
1. 自頂而下的歸併排序
示意圖:
分---直到單個元素為止。然後 逐步合併。
《演算法 第四版》(四)歸併排序
時間複雜度o n logn 額外空間複雜度o n 具體分析過程請看 遞迴相關演算法的時間複雜度分析 master公式引入 歸併排序又分為自頂向下和自底向上兩種思路,這裡著重說一下自頂向下 1.1 自頂向下 最主要的是這個merge的外排思想,怎麼將兩個陣列合併起來並且排好序 其實下面 中並不需要遞迴...
《演算法(第四版)》排序 模板
本書對排序類演算法有乙個模板,包括了以下幾種方法 1 sort 這個方法裡面實現的就是排序的演算法 2 less 這個方法裡是利用了comparable介面裡的compareto方法,其中compareto方法對於本物件與傳入的比較物件小於,等於,大於,分別返回負數,0,正數 這個方法如果compa...
演算法 第四版 學習筆記之java實現歸併排序
歸併排序思想 將乙個陣列分成兩部分分別排序 使用遞迴 然後將結果合併起來,即將最後兩個有序的陣列歸併成乙個更大的有序陣列。時間複雜度o n nlogn 歸併排序最吸引人的性質是它能保證將任意長度為n的陣列排序所需時間和nlogn成正比,而缺點便是它所需的額外空間和n成正比。歸併排序又分為自頂向下的排...