归并:将两个有序的数组归并成一个更大的有序数组。
归并算法:先(递归地)将它分为两半分别排序,然后将结果归并起来。
· 优点:保证将任意长度为N的数组排序所需时间和NlogN成正比;
· 缺点:所需的额外空间和N成正比。
2.2.1 原地归并的抽象方法
public static void merge(Comparable[] a, int lo, int mid, int hi) { // 将a[lo..mid]和a[mid+1..hi]归并 int i = lo, j = mid + 1; for (int k = lo; k <= hi; k++) { // 将a[lo..hi]复制到aux[lo..hi] aux[k] = a[k]; } for (int k = lo; k <= hi; k++) { if (i > mid) a[k] = aux[j++]; // 左半边用尽 else if (j > hi) a[k] = aux[i++]; // 右半边用尽 else if (less(aux[j], aux[i])) a[k] = aux[j++]; // 右 < 左 else a[k] = aux[i++]; // 右 > 左 } }