归并排序
-
典型的分治思想
-
递归排序算法:先递归地将其分成两半分别排序,然后将结果归并起来。
-
时间上(优):能保证长度为N的数组排序所需时间和NlogN成正比,就能将一个庞大的数组排序,可以处理数百万甚至更大规模的数组。(这是插入排序或选择排序做不到的)
-
空间上(劣):所需的额外空间和N成正比。
-
归并排序是一种渐进最优的基于比较排序的算法
1. 原地归并的抽象方法
思想:将子数组a[lo…mid]和a[mid+1…hi]归并成一个有序的数组并将结果存放在a[lo…hi]中。它将涉及的所有元素复制到一个辅助数组中,再把归并的结果放回原数组。
private static Comparable[] aux; //归并所需的辅助数组
public static void merge(Comparable[] a,int lo,int mid,int hi){
//将a[lo..mid]和a[mid+1..hi]归并
aux = new Comparable[a.length];
int i = lo, j = mid+1;
for (int k=lo; k<=hi;