原理,把原始陣列分成若干子陣列,對每乙個子陣列進行排序,
繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完,形成有序的陣列
舉例無序陣列[6 2 4 1 5 9]
先看一下每個步驟下的狀態,完了再看合併細節
第一步 [6 2 4 1 5 9]原始狀態
第二步 [2 6] [1 4] [5 9]兩兩合併排序,排序細節後邊介紹
第三步 [1 2 4 6] [5 9]繼續兩組兩組合併
第四步 [1 2 4 5 6 9]合併完畢,排序完畢
輸出結果[1 2 4 5 6 9]
合併細節
詳細介紹第二步到第三步的過程,其餘類似
第二步:[2 6] [1 4] [5 9]
兩兩合併,其實僅合併[2 6] [1 4],所以[5 9]不管它,
原始狀態
第乙個陣列[2 6]
第二個陣列[1 4]
第三個陣列[...]
第1步,順序從第一,第二個陣列裡取出乙個數字:2和1
比較大小後將小的放入第三個陣列,此時變成下邊這樣
第乙個陣列[2 6]
第二個陣列[4]
第三個陣列[1]
第2步,繼續剛才的步驟,順序從第一,第二個陣列裡取資料,2和4,
同樣的比較大小後將小的放入第三個陣列,此時狀態如下
第乙個陣列[6]
第二個陣列[4]
第三個陣列[1 2]
第3步,再重複前邊的步驟變成,將較小的4放入第三個陣列後變成如下狀態
第乙個陣列[6]
第二個陣列[...]
第三個陣列[1 2 4]
static void merge(int unsorted, int first, int mid, int last, int sorted)
static void merge_sort(int unsorted, int first, int last, int sorted)
--", first, mid, last);
merge_sort(unsorted, first, mid, sorted);
merge_sort(unsorted, mid, last, sorted);
merge(unsorted, first, mid, last, sorted);}}
static void main(string args)
;int sorted = new int[x.length];
merge_sort(x, 0, x.length, sorted);
for (int i = 0; i < sorted.length; i++)
console.readline();
}
歸併排序 Merge sort
merge the a s.m and a m 1.t to r s.t template void two merge typet a,typet r,int s,int m,int t while i m r k a i while j t r k a j merge the a 0.n 1 s...
歸併排序(merge sort)
歸併排序 歸併排序是一種遞迴排序演算法,無論陣列元素的原始順序如何,其效能恆定不變。將陣列一分為二,分別排序兩部分元素,再將有序的兩半陣列歸併為乙個有序陣列。歸併步驟比較陣列前一半的元素與陣列的後一半元素,並將較小元素移到臨時陣列,該過程繼續前進,直到其中一半再沒有元素為止。此後只需將其餘元素移到臨...
歸併排序 Merge Sort
歸併排序 merge sort 是利用 歸併 技術來進行排序。歸併是指將若干個已排序的子檔案合併成乙個有序的檔案。兩路歸併演算法 1 演算法基本思路 設兩個有序的子檔案 相當於輸入堆 放在同一向量中相鄰的位置上 r low.m r m 1.high 先將它們合併到乙個區域性的暫存向量r1 相當於輸出...