分治演算法之合併排序

2021-08-17 03:24:20 字數 684 閱讀 2534

合併排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列

1、分解:將待排序元素分成大小大致相同的兩個子串行

2、治理:對兩個子串行進行合併排序

3、合併:將排好序的有序子串行進行合併,得到最終的有序序列

//合併的輔助函式

void merge(int *data, int low, int mid, int high)

{ std::cout << "merge low is" << low << " mid is:" << mid << " high is" << high << std::endl;

int newlength = high - low + 1;

int *newdata = new int[newlength];

int i = low, j = mid + 1, k = 0;

//分解2個陣列,並且合併完其中的乙個陣列

while (i

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

根據分治策略,我們建立了合併排序演算法,合併排序演算法的基本思想是 將待排序元素分成大小大致相同的兩個子集合分別對兩 個子集合進行排序,最終將排好序的子集合合併成為所要求的排好序的集合。換句話說,將乙個陣列兩個兩個結合並排序,形成小範圍有序的新的陣列,再將新的陣列四個四個結合,在此形成新的陣列以此 ...

分治演算法(二)合併排序

1.問題分析 合併排序問題給定的是乙個無序的序列,可以把待排序的元素分解為兩個規模大致相等的子串行。如果還是不容易解決就繼續將子串行分解,直到子串行中的元素個數為1,因為單個元素的序列本身是有序的,此時便可以進行合併,從而得到乙個完整的有序序列。2.演算法設計 1 分解 將待排序元素分成大小大致相同...

分治 合併排序 自然合併排序(C )

演算法步驟 引用自 菜鳥教程 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列 設定兩個指標,最初位置分別為兩個已經排序序列的起始位置 比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置 重複步驟 3 直到某一指標達到序列尾 將另一串行剩下的所有元素直...