原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。
要点:归并、分治
实现:
/**
* 归并排序
*
* @param L
*/
public static void MergeSort(int L[], int m, int n) {
int k;
if (m < n) {
k = (m + n) / 2;
MergeSort(L, m, k);
MergeSort(L, k + 1, n);
Merge(L, m, k, n);
}
}
public static void Merge(int L[], int min, int k, int max) {
int m = min, n = max;
int[] temp = new int[L.length];
int p = 0, l = k + 1;
while (m <= k && l <= n)
temp[p++] = (L[m] < L[l]) ? L[m++] : L[l++];
while (m <= k)
temp[p++] = L[m++];
while (l <= n)
temp[p++] = L[l++];
for (int i = min; i <= max; i++) {
L[i] = temp[i - min];
}
}