演算法分析 分治思想之合併排序

2021-08-08 06:14:35 字數 768 閱讀 5156

根據分治策略,我們建立了合併排序演算法,合併排序演算法的基本思想是:將待排序元素分成大小大致相同的兩個子集合分別對兩

個子集合進行排序,最終將排好序的子集合合併成為所要求的排好序的集合。

換句話說,將乙個陣列兩個兩個結合並排序,形成小範圍有序的新的陣列,再將新的陣列四個四個結合,在此形成新的陣列以此

類推,最終實現整個陣列的有序。

實現該演算法時,首先應該顧名思義,先合併在排序,故當思考時,我們應該將該問題劃分為兩個子函式——合併函式以及排序函

數。首先,我們先考慮如何實現合併這一函式,根據演算法的思想,將待排序元素分成大小大致相同的兩個子集,故此,我們應該

考慮以下幾點:

1、如何將乙個有序的陣列分成兩個大小大致相同的子集。

2、如何儲存分好的陣列

於是在建立函式時,我們首先引入乙個變數s作為控制分組的變數來解決第一小點,然後我們在原有陣列a的基礎上引入乙個新的陣列b

通過陣列a,b兩個陣列的迴圈使用來儲存分好的陣列成功解決第二小點

之後我們便可以開始建立合併排序演算法

#includeusing namespace std;

//合併排序演算法

void mergesort(int a)

else//當多餘陣列少於乙個分組時

for(int j=i;j

void merge(int a,int b,int l,int m,int n) }

if(i>m) }

else

} }

合併排序,分治思想

2011 06 17 22 42 09 一般分法思想分為三個步驟 分解 將原問題分解成一系列子問題 解決 遞迴解決各子問題。若子問題足夠小,則直接求解 合併 將子問題的結果合併成原問題的解 合併排序就是用了這個思想。分解 將n個元素分成各含 n 2個元素的子串行 解決 用合併排序法對兩個子串行遞迴地...

分治演算法之合併排序

合併排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列 1 分解 將待排序元素分成大小大致相同的兩個子串行 2 治理 對兩個子串行進行合併排序 3 合併 將排好序的有序子串行進行合併,得到最終的有序序列 合...

演算法分析 分治思想之快速排序

優化乙個演算法的最根本的原理就是減少演算法的基本操作。分治法的設計思想是,將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。於是,在快速排序中,我們通過分割陣列的思路來將大問題分割成小規模的問題,與二分搜尋法類似的是,在二分法 中,我們需要進行的操作是搜尋,是在已經排...