《演算法筆記》 歸併排序

2021-08-21 23:55:00 字數 999 閱讀 2570

歸併操作,也叫歸併演算法,指的是將兩個順序序列合併成乙個順序序列的方法,平均時間複雜度為o(nlogn)。   歸併排序的實現分為遞迴實現非遞迴(迭代)實現

如 設有數列

初始狀態:6,202,100,301,38,8,1

第一次歸併後:,,,,比較次數:3;

第二次歸併後:,,比較次數:4;

第三次歸併後:,比較次數:4;

總的比較次數為:3+4+4=11;

逆序數為14;

歸併操作的工作原理如下:

第一步:申請空間,使其大小為兩個已經排序

序列之和,該空間用來存放合併後的序列

第二步:設定兩個指標

,最初位置分別為兩個已經排序序列的起始位置

重複步驟3直到某一指標超出序列尾,將另一串行剩下的所有元素直複製到合併序列尾。

#include #define maxsize  6

using namespace std;

void merge(int a, int left, int mid, int right)// 合併兩個已排好序的陣列a[left...mid]和a[mid+1...right]

while (i <= mid)

while (j <= right)

for (int k = 0; k < len; k++)

}void mergesortrecursion(int a, int left, int right)    // 遞迴實現的歸併排序(自頂向下)

void mergesortiteration(int a, int len)    // 非遞迴(迭代)實現的歸併排序(自底向上)

}}int main()

cout

for (int i = 0; i < n2; i++)

cout

}

演算法筆記 歸併排序

平均時間複雜度o nlogn 對於乙個待排序的陣列,我們可以先遞迴地將它分成兩半分別排序,然後將結果歸併起來。簡單的說就是把乙個陣列分成兩半,然後把這兩半分別排好序,最後將這兩部分合在一起進行排序,實際情況下,分成兩部分陣列的排序仍然是採用歸併的方式,所以我們會使用到遞迴的思想來操作。前提是待排序陣...

演算法筆記 歸併排序

很簡單的乙個排序,先通過遞迴劃分區間到最小 因為乙個元素具有單調性 然後再合併兩個單調區間為乙個單調區間,具體看 模板 void merge int l,int m,int r else temp k a i while i m temp k a i while j r temp k a j for...

歸併演算法 歸併排序

歸併演算法 歸併排序 這周需要用到歸併演算法,於是找了找相關的資料,整理如下 歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low...