基本思想
归并排序,是创建在归并操作上的一种有效的排序算法。归并排序算法思想是建立在分治法之上的,思路简单,时间复杂度不会过于复杂,主要适用于总体无序,但子序列相对有序的情况。
基本步骤
归并排序既可以采用递归思想,也可以采用迭代思想,无论采用哪种思想,其大致都可以分为三大步骤:
- 分解序列:将序列进行二分
- 序列排序:将二分后的各个子序列进行排序
- 序列排序:合并各个子序列
算法图示(递归)
Java递归代码:
class Solution {
private void mergeSort(int start,int end,int[]arr) {
if(start>=end){
return;
}
int mid=(start+end)/2;
int left=start;
int right=mid+1;
//将序列二分成子序列
mergeSort(start,mid,arr);
mergeSort(mid+1,end,arr);
//开辟一段数组存储子序列排序后的结果
int []sort=new int[end-start+1];
int i=0;
//进行排序,将子序列已排好序的左右两部分序列合并
while(left<=mid||right<=end){
if(left>mid){
sort[i++]=arr[right++];
}else if(right>end){
sort[i++]=arr[left++];
}else{
if(arr[left]<arr[right]){
sort[i++]=arr[left];
left++;
}else{
sort[i++]=arr[right];
right++;
}
}
}
//序列覆盖
if (sort.length >= 0) System.arraycopy(sort, 0, arr, start, sort.length);
}
}