歸併排序Merge sort

2021-08-28 09:19:11 字數 1377 閱讀 2762

原理,把原始陣列分成若干子陣列,對每乙個子陣列進行排序,

繼續把子陣列與子陣列合併,合併後仍然有序,直到全部合併完,形成有序的陣列

舉例無序陣列[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 相當於輸出...