归并排序的基本思想完全遵循分治模式:
分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。
解决:使用归并排序递归的排序两个子序列。
合并:合并两个已排序的子序列以产生已排序的答案。
Java代码实现此算法如下:
public static void mergeSort(int[] arr, int lo, int hi) {
if ( lo < hi - 1 ) {
int mi = ( lo + hi ) / 2;
mergeSort( arr, lo, mi );
mergeSort( arr, mi, hi );
merge( arr, lo, mi, hi);
}
}
public static void merge(int[] arr, int lo, int mi, int hi) {
int frontLength = mi - lo;
int backLength = hi - mi;
int[] l = new int[frontLength + 1];
int[] r = new int[backLength + 1];
for (int i = 0; i < frontLength; i++)
l[i] = arr[lo + i];
for (int i = 0; i < backLength; i++)
r[i] = arr[mi + i];
l[frontLength] = Integer.MAX_VALUE;
r[backLength] = Integer.MAX_VALUE;
int lp = 0;
int rp = 0;
for (int i = lo; i < hi; i++) {
if (l[lp] < r[rp]) {
arr[i] = l[lp];
lp++;
} else {
arr[i] = r[rp];
rp++;
}
}
}