歸并排序算法思想:
分而治之(divide - conquer);每個遞歸過程涉及三個步驟
第一, 分解: 把待排序的 n 個元素的序列分解成兩個子序列, 每個子序列包括 n/2 個元素.
第二, 治理: 對每個子序列分別調用歸并排序MergeSort, 進行遞歸操作
第三, 合并: 合并兩個排好序的子序列,生成排序結果.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public static void mergeSort( int [] a, int [] tmp, int left, int right) { if (left < right) { int mid = left + (right - left) / 2 ; mergeSort(a, tmp, left, mid); // 左排序 mergeSort(a, tmp, mid + 1 , right); // 右排序 merge(a, tmp, left, mid + 1 , right); // 左右合并 } } public static void merge( int [] a, int [] tmp, int left, int rightPos, int right) { int leftEnd = rightPos - 1 ; int tmpPos = left; int num = right - left + 1 ; while (left <= leftEnd && rightPos <= right) { if (a[left] < a[rightPos]) { tmp[tmpPos++] = a[left++]; } else { tmp[tmpPos++] = a[rightPos++]; } } while (left <= leftEnd) { tmp[tmpPos++] = a[left++]; } while (rightPos <= right) { tmp[tmpPos++] = a[rightPos++]; } for ( int i = 0 ; i < num; i++, right--) { a[right] = tmp[right]; } } |
歸并算法示意圖:
以上所述就是本文的全部內容了,希望大家能夠喜歡。