演算法學習---歸併演算法簡單記錄
1、核心思想
- 將難以一次性解決的原始問題(大問題),分割為較為容易處理的小問題(此步驟一般遞迴、迭代均可實現),計算結果;
- 然後將小問題的計算結果合併(匯聚or統計);
- 最終得到問題答案。
2、應用
經典應用,陣列排序演算法(遞迴實現方式)如下:
在學習過程中,應該先理解演算法整個流程,在掌握整個流程之前,如果在某一點的實現上有問題,可以暫時放下,後續把它研究透徹。
- mergeSort方法開啟陣列分割流程
- recusion方法具體分割實現
- merge方法具體小問題結果合併成大問題答案演算法
/**
* 2路歸併排序 1、首先將整體分成兩部分,
* 對每一部分進行排序,(遞迴),將每一部分再進分成兩部分,直至不可再分
* 2、將左右兩部分進行合併,最終合併成有序陣列
* @param arr
* @return
*/
public static int[] mergeSort(int[] arr) {
if (null == arr || arr.length == 0 || arr.length == 1)
return arr;
int start = 0;
int end = arr.length - 1;
recusion(arr, start, end);
return arr;
}
/**
* 遞迴呼叫方法,對確定範圍內分左右兩側進行排序
*
* @param arr
* @param start
* @param end
*/
private static void recusion(int[] arr, int start, int end) {
if (start >= end)
return;
int mid = start + (end - start) / 2;
recusion(arr, start, mid);
recusion(arr, mid + 1, end);
merge(arr, start, mid, mid + 1, end);
}
/**
* 合併兩個有序陣列
*
* @param arr
* @param start
* @param mid
* @param mid_plus
* @param end
*/
private static void merge(int[] arr, int start, int mid, int mid_plus, int end) {
if (mid_plus > end)
return;
for (int i = mid_plus; i <= end; i++) {
for (int j = i; j >= start;) {
while ((j - 1) >= start && arr[j] < arr[j - 1]) {
swap(arr, j - 1, j);
--j;
}
break;
}
}
}
迭代演算法與遞迴演算法思想一致,不列出具體程式碼。1
演算法複雜度
這塊理的不太順,目前直接記住完事
時間:O( nlogn )
空間:O(n)
嗯,所以仔細想下,迭代非常簡單。 ↩︎
相關文章
- 演算法學習 – 歸併排序演算法排序
- 演算法學習 - 歸併排序演算法排序
- 演算法導論學習之六:歸併排序演算法排序
- 《演算法圖解》學習記錄演算法圖解
- 演算法學習之簡單排序演算法排序
- sql注入學習簡單記錄SQL
- 單模式匹配 KMP 演算法 簡易版學習筆記模式KMP演算法筆記
- js 歸併演算法JS演算法
- 機器學習演算法:Logistic迴歸學習筆記機器學習演算法筆記
- SG學習筆記之RMAN簡單歸納筆記
- 演算法之歸併排序演算法排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 歸併排序--排序演算法排序演算法
- 排序演算法 - 歸併排序排序演算法
- 歸併演算法詳解演算法
- 排序演算法——歸併排序排序演算法
- 排序演算法(歸併排序)排序演算法
- 手寫演算法並記住它:歸併排序演算法排序
- 直接插入演算法的學習記錄演算法
- 簡單演算法――Cisco某個學習資料演算法
- 排序演算法之 '歸併排序'排序演算法
- 分治法演算法學習(一)——歸併排序、求最大子陣列和演算法排序陣列
- 小白的學習記錄——Redis的簡單使用Redis
- 演算法學習筆記:Kosaraju演算法演算法筆記
- 歸併排序的簡單理解排序
- 演算法學習筆記演算法筆記
- 從演算法開始[歸併排序]演算法排序
- 演算法練習記錄(24.10.5)演算法
- 演算法中的變形金剛——單純形演算法學習筆記演算法筆記
- 複習資料結構:排序演算法(四)——歸併排序資料結構排序演算法
- 線性迴歸演算法學習總結演算法
- 演算法學習筆記(3.1): ST演算法演算法筆記
- 演算法學習筆記(1)- 演算法概述演算法筆記
- 從零開書學演算法(導論)之歸併排序演算法排序
- 演算法學習記錄二(C++)--->字串空格替換演算法C++字串
- 歸併排序就這麼簡單排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序