提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
归并排序采用一种分治的思想,分治就是说分而治之
二、使用步骤
1.归并分为两个步骤,首先第一个步骤就是说,先将其分开,第二步就是将有序集合进行合并
代码实现
//将要排序的数组传入
public void sort(int arr[]){
//避免在递归中不停的创造数组
int temp[]=new int[arr.length];
sort(arr,0,arr.length-1;temp);
}
public void sort(int [] arr,int l,int r,int []temp){
//将数组分裂
if(l<r){
int mid=l+(r-l)/2;//避免数组越界
//对左数组进行归并
sort(arr,l,mid,temp);
//对右边数组进行归并排序
sort(arr,mid+1,right,temp);
//合并有序子序列
Merge(arr,l,mid,r,temp);
}
}
//合并子序列的函数
public void Merge(int arr[],int l,int mid,int r,int[]temp){
//从左序列开始的指针
int left=l;
//从右序列开始的指针
int right=mid+1;
int t=0;//临时数组上的指针
while(left<=mid&&right<=r){
if(arr[left]<=arr[right])
temp[t++]=arr[left++]
}else{
temp[t++]=arr[right++];
}
//出来循环后,
//将剩余元素补充进入临时数组当中
while(left<=mid){
temp[t++]=arr[left++];
}
while(right<=r){
temp[t++]=arr[right++];
}
//将临时数组中的元素赋值给原数组
t=0;
while(left<=right){
arr[left++]=temp[t++];
}
}