归并排序
归并排序的思想是分治法,如果想要将一个数组排序,那么将这个数组分为左区间和右区间,左区间一定是小于右区间的,再将左区间继续划分,右区间也继续划分。。。
最后将排好序的数组全都归并起来,这样听起来像是从上向下划分,其实归并排序主要是是从下向上,合并的过程。
- 先将单个元素的数组归并为两个元素的有序数组
- 再将包含两个元素的有序数组归并为四个元素的有序数组
- …
- 最后一步,将两个n/2元素的数组,归并为一个有序数组
public static void MerSort(int []a){
MerSort_c(a,0,a.length-1);
}
public static void MerSort_c(int []a,int low,int high){
if(low>=high) return;//终止条件
//归并排序是自下向上
int mid = (low+high)/2;
MerSort_c(a,low,mid);
MerSort_c(a,mid+1,high);
Merge(a,low,mid,high);