归并排序
归并排序算法基于归并这个简单的操作,即将两个有序的数组归并成一个更大的有序数组。要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。归并排序最吸引人的性质是它能够保证将任意长度为N的数组排序所需时间和NlogN成正比;它的主要缺点则是它所需的额外空间和N成正比。
原地归并的抽象方法
public static void merge(Comparable[] a, int low, int mid, int high){
int i = low, j = mid + 1;
for(int k = low; k <= high; k++)
aux[k] = a[k];
for(int k = low; k <= high; k++){
if (i > mid)
a[k] = aux[j++];
else if (j > high)
a[k] = aux[i++];
else if (less(aux[j]