归并排序——Java
文章目录 归并排序 原地归并的抽象方法 自顶向下的归并排序 自底向上的归并排序 三项优化 归并排序 两个有序数组归并成一个更大的有序数组,就叫归并。 归并排序 是一种递归排序算法,就对一个数组来说,可以先将它(递归地)分成两半分别排序,然后将结果归并起来。 时间复杂度:O(NlogN) 空间复杂度:T(N) 原地归并的抽象方法 两个不同的有序数组如何实现归并? 一个最简单直接地方法就是创建一个最够大的第三数组,然后将两个有序数组的元素从大到小的排到第三数组中,这就叫原地归并。 /** * 原地归并的抽象方法 * 归并,数组两边一定要是有序的 */ 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 ; //将a[lo..hi]复制到aux[lo..hi] for ( int k = lo ; k <= hi ; k ++ ) { aux [ k ] = a [ k ] ; } //归并回到a[lo..hi] for ( int k = lo ; k <= hi ; k ++ ) { if ( i > mid ) { a [ k ] = aux [ j ++ ] ; } else