資料結構與演算法 歸併排序

2022-09-28 11:18:08 字數 1389 閱讀 5895

歸併字面上的意思是合併,歸併演算法的核心思想是分治法,就是將乙個陣列一刀切兩半,遞迴切,直到切成單個元素,然後重新組裝合併,單個元素合併成小陣列,兩個小陣列合併成大陣列,直到最終合併完成,排序完畢。

我們以[ 8,2,5,9,7 ]這組數字來舉例

首先,一刀切兩半:

再切:

再切:

粒度切到最小的時候,就開始歸併

資料量設定的比較少,是為了方便**,資料量為單數,是為了讓你看到細節,下面我畫了一張更直觀的圖可能你會更喜歡:

我們可以發現 merge 方法中只有乙個 for 迴圈,直接就可以得出每次合併的時間複雜度為 \(o(n)\) ,而分解陣列每次對半切割,屬於對數時間 \(o(\log n)\) ,合起來等於 \(o(\log_2)\) ,也就是說,總的時間複雜度為 \(o(n\log n)\) 。

資料結構與演算法 歸併排序

include include include string include include include include algorithm using namespace std void merge vector input,int left,int mid,int right,vector...

資料結構與演算法(歸併排序)

歸併排序是採用分治法的乙個典型的應用,歸併排序的思想就是先遞迴分解陣列,在合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的前面的數,誰小就先取誰,取了後相應的指標就往後移一位,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。def merge sort alis...

資料結構與演算法 歸併排序

你可以在 的 mer 標籤中看到歸併排序的動畫。歸併排序 時間複雜度 o nlogn 空間複雜度 o n 基本思想 分治思想。8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 並 8 6 2 3 1 5 7 4...