原理
归并排序就是建立在归并操作上的一种排序算法,采用分治思想。将有序的子序列合并,从而得到完全有序的序列。
就是从子序列有序到总序列有序。
合并两个有序数组
合并[start,mid]和[mid+1,end]两个有序区间
public static void Sort(int[]array,int start,int mid,int end){
int left=start;
int right=mid+1;
int i=0;//临时数组下标
int[]cur=new int[end-start+1];//临时数组
//合并两个有序数组
while(left<=mid&&right<=end){
if (array[left]<=array[right]){
cur[i++]=array[left++];
}else{
cur[i++]=array[right++];
}
}
while (left<=mid){
cur[i++]=array[left++];
}while(right<=end){
cur[i++]=array[right++];
}
//将cur的元素搬移到array的对应位置
for (int j=0;j<cur.length;j++){
array[start+j]=cur[j];
}
}
递归 归并
注意这里的start和end就是每次的待排序区间,而[start,mid]和[mid+1,end]是经过排序后的两个有序区间
public static void mergerSort(int[]array,int start,int end){
if (start>=end){
return;
}
int mid=(start+end)/2;
mergerSort(array,start,mid);
mergerSort(array,mid+1,end);
Sort(array,start,mid,end);
}