排序 歸併排序

2021-08-15 02:15:42 字數 1290 閱讀 1710

歸併的思想就是將本是無序的陣列序列

通過兩兩合併排序後再合併,最終獲得乙個有序的陣列。如下圖。

二路歸併排序:

假設初始序列含有

n 個記錄,則可以看成是

n個有序的子串行,每個子串行的長度為

1 ,然後兩兩歸併,得到 ⌈n

2⌉個長度為

2 或

1的有序子串行;再兩兩歸併,..

....

,如此重複,直至得到乙個長度為

n 的有序序列為止。

下圖是二路歸併排序演算法過程的乙個例項:

一次二路歸併排序演算法的目標是把若干個長度為

k的相鄰有序子陣列從前向後進行兩兩歸併,得到個數減半的長度為 2k

的相鄰有序子陣列。

考慮到:

若元素個數為 2k

的整數倍,則兩兩歸併正好完成

n 個資料元素的一次二路歸併;

若元素個數不為 2k

的整數倍,則當歸併到最後一組時,剩餘的元素個數會不足 2k

個,這時的處理方法是:

/**

* 一次二路歸併排序演算法

* @param a 要排序的序列

* @param s 起始座標

* @param m 中間座標

* @param e 結束座標

*/function merge(a, s, m, e)

for (j = 0; j < n2; j++)

l[n1] = 10000000;

r[n2] = 10000000;

/* 將 前段資料與後段資料 比較由小到大歸併入 l 中 */

for (i = 0, j = 0, k = s; k <= e; k++)

else}}

2、歸併排序演算法

/**

* 歸併排序演算法

* @param a 要排序的序列

* @param s 起始座標

* @param e 結束座標

*/function mergesort(a, s, e)

}

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...

排序 歸併排序

利用遞迴的思想,當n 1時,只有乙個元素需要排序,為遞迴臨界條件 否則,遞迴的將前半部分資料和後半部分資料各自歸併排序,得到排序後的兩部分資料,然後再將得到的兩部分合併到一起。mergesort algorithm public void mergesort int data mergesort例程...