思想:
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的有序表為止。下面是歸併排序演算法的遞迴實...