1.归并排序
1.1递推公式
归并排序分解图
递推公式:
merge_sort(p…r) = merge(merge_sort(p…q), merge_sort(q+1…r))
终止条件:
p >= r 不用再继续分解
1.2代码实现
/**
* 归并排序
*
* @param value
*/
public static void mergeSort(int[] value) {
mergeSort(value, 0, value.length - 1);
}
//将两个排好序的合并到一起
public static void mergeSort(int[] value, int m, int n) {
//终止条件
if (m >= n) {
return;
}
mergeSort(value, m, (m + n) / 2);
mergeSort(value, (m + n) / 2 + 1, n);
//将两个子排序合并到一起 用临时数组
merge(value, m, n);
}
/**
* 合并函数
*
* @param value
* @param m
* @param n
*/
private static void merge(int[] value, int m, int n) {
int[] tem = new int[n - m + 1];
int i = m;
int j = (m + n) / 2 + 1;
for(int x = 0; x <= n - m; x++) {
if (j <= n && value[j] < value[i]