這一章節所講的歸併排序,跟希爾排序一樣,也是一種效率很高的排序方法,也同樣採用了分而治之的方法.
歸併排序的基本思想為:先把無序序列一分為二,然後分別對兩邊的序列進行排序,最後再整合兩邊已經排好的序列.下邊已一張圖來展示歸併排序的思想(圖是借用網友的,見做的非常簡潔易懂,便引用之)
從途中我們看到,二分後的兩邊序列,又進行二分歸併處理,直到兩邊的序列不能二分為止.這就是採用的遞迴思想,出口為左右了;兩邊各只有乙個元素,然後再將兩邊的有序序列歸併成最終序列.下邊看**理解:
#include #include #include #include using namespace std;
//需要注意的是,這裡的類模板需要放在標頭檔案中去實現,這裡為了直觀,直接放這裡了
template class sort
else
}//把左邊剩餘的元素追加到臨時空間中
while(lindex <= nmid)
//或者把右邊剩餘的元素追加到臨時空間中
while(rindex <= nend)
//將臨時空間排好序的元素放到原序列空間中
for(int i=nbegin, k=0; i<=nend; i++)
}//歸併排序(注意採用的是遞迴方式)
static void merger(t* narray, int nbegin, int nend, bool min2max = true)
}public:
static void merger(t* narray, int nlen, bool min2max = true)
};int main(int argc, char* ar**)
; int len = sizeof(array)/sizeof(int);
sort::merger(array, len);
for(int i=0; i編譯測試
排序演算法之歸併排序
歸併排序也是經典的使用分治法思想的代表演算法之一。歸併排序的效率很高,而且是一種穩定的排序。其總體的思想思路就是將待排序的元素分成大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排序的子集合合併成排好序的總集合 歸併排序c 實現如下 include void mergesort int arr...
排序演算法之歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用,歸併排序將兩個已排序的表合併成乙個表。歸併排序基本原理 通過對若干個有序結點序列的歸併來實現排序。所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。歸併排序基本思...
排序演算法之歸併排序
歸併排序,和快排一樣同樣採用了分治的思想,將兩個 或以上 有序表合併成乙個新的有序表。歸併排序步驟如下 把n個記錄看成 n個長度為 1 的有序子表 進行兩兩歸併使記錄關鍵字有序,得到 n 2 個長度為 2 的有序子表 重複第2步直到所有記錄歸併成乙個長度為n的有序表為止。下面是歸併排序演算法的遞迴實...