排序演算法之歸併排序

2021-08-06 02:14:48 字數 718 閱讀 5917

思想:

1. 基於分治法

2. 將待排序序列每次進行兩兩劃分

3. 將劃分好的序列進行兩兩合併,並且在合併的過程中進行排序r

效能
1. 時間複雜度:

* merge函式中遞迴是乙個完全二叉樹:log2n

* 裡面還有乙個合併的while迴圈n

* 時間複雜度 = o(nlogn)

2. 空間複雜度

* 與原始記錄序列同樣數量的儲存空間存放歸併結果

* 遞迴時深度為logcn的棧空間

* 空間複雜度:o(n+logn)

3. 穩定性:

* 需要兩兩比較,不存在跳躍

* 穩定

**
void mergesort(int a,int l,int r,int m)

for (int j = 0; j1];

}//合併兩個資料

int k = l;//k一定要等於l,因為左半邊不一定是從0開始的

int i = 0;

int j = 0;

while (iif (l[i]else

}//因為兩個陣列長度可能不一樣,如果那個沒有遍歷完,就把它放入到合併好的陣列的後面

while (iwhile (j//歸併排序

void merge(int a,int l,int r)

}

排序演算法之歸併排序

歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...

排序演算法之歸併排序

歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。歸併排序基本原理 通過對若干個有序結點序列的歸併來實現排序。所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。歸併排序基本思...

排序演算法之歸併排序

歸併排序,和快排一樣同樣採用了分治的思想,將兩個 或以上 有序表合併成乙個新的有序表。歸併排序步驟如下 把n個記錄看成 n個長度為 1 的有序子表 進行兩兩歸併使記錄關鍵字有序,得到 n 2 個長度為 2 的有序子表 重複第2步直到所有記錄歸併成乙個長度為n的有序表為止。下面是歸併排序演算法的遞迴實...