歸併排序就是利用歸併的思想實現的排序方法。而且充分利用了完全二叉樹的深度是
經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第乙個記錄的位置交換;接著對不包括第乙個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換;重複該過程,知道進行比較的記錄只剩下乙個為止。
一趟歸併需要將陣列 a中相鄰的長度為h的有序序列進行兩兩歸併.並將結果放到temp中,這需要將待排序列中的所有記錄掃瞄一遍,因此耗費o(n),而又完全二叉樹的深度可知,整個歸併排序需要進行(
由於歸併排序在歸併過程中需要與原始序列同樣數量的儲存空間存放歸併結果以及遞迴時深度為
另外,對**進行仔細研究,發現merge函式中有if (a[i] < a[j]) 的語句,說明它需要兩兩比較,不存在跳躍,因此歸併排序是一種穩定的排序演算法。
也就是說,歸併排序是一種比較佔記憶體,但卻效率高且穩定的演算法。
(1)申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
(2)設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
(3)比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
(4)重複步驟3直到某一指標達到序列尾
(5)將另一串行剩下的所有元素直接複製到合併序列尾
以陣列為例,
最後的排序結果:
10,20,30,40,50,60,70,80,90
public
class mergesort else
}// 把左邊剩餘的數移入陣列
while (i <= mid)
// 把右邊邊剩餘的數移入陣列
while (j <= high)
// 把新陣列中的數覆蓋nums陣列
for (int k2 = 0; k2 < temp.length; k2++)
}public
static
void
mergesort(int a, int low, int high)
}public
static
void
main(string args) ;
mergesort(a, 0, a.length - 1);
system.out.println("排序結果:" + arrays.tostring(a));}}
**:
java 歸併排序原理
package cn.exercise 歸併排序 o nlogn author yang public class mergearray bridge new int sorted.length segmentation sorted,0,sorted.length 1 bridge null 分割...
java排序演算法 歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divideand conquer 的乙個非常典型的應用。在討論歸併排序演算法之前,先來看乙個小問題,對於兩個有序陣列,如何合併成乙個有序陣列問題。public static voidmerge intaa,intbb else...
排序演算法 歸併排序 (java)
歸併排序,顧名思義,就是將資料進行合併,我們首先將待排陣列分成兩個子串行,然後在對其單個序列進行排序,不斷遞迴到只有兩個元素的子串行,然後再向上返回,最中得到的是兩個有序的子串行,最後我們通過乙個輔助陣列,遍歷這兩個陣列,挑選出較小的元素將其放在輔助陣列中,這樣我們就會在輔助陣列中將數排好序了,然後...