演算法 第四版 2 2歸併排序

2021-07-27 11:48:46 字數 1092 閱讀 2807

歸併排序:是採用分治法(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成正比。歸併排序又分為自頂向下的排...