排序算法之归并排序(java实现)

归并算法是分治算法的一个典型
可以这么说 它的核心就是分而治之 而归并算法就是一个分解 一个合并的过程
如图所示

直接上代码

“`
public class demo{
public static void fenJie(int[] arr,int left,int right )
//递归界限
if(left>=right) return;
//拆分
int mid=(left+right)/2;
fenJie(arr,left,mid);
fenJie(arr,mid+1,right);
//归并
merGe(arr,left,mid,right);
}
private static void merGe(int[] arr,int left,int mid,int right ){
//建立一个临时数组保存当前需要归并的数组 注意right+1 (这个方法取的是左闭右开区间 所以要+1)
int tmpArr= Arrays.copyOfRange(arr,left,right+1);
// i j 引用指向左右两边数组(需要归并的数组 也就是递归后的分解产生上的逻辑上的临时数组)的第一个索引 然后就是让两个序列 合为一个有序序列的过程了
int i=left;
int j=mid+1;
//注意这里的right与上个方法的right取的是数组的最后一个索引 也就是length-1
for(int k=left;k<=right;k++){
if(i>mid){
//左边部分归并完毕
arr[k]=tmpArr[j-left]; j++;
}else if(j>right){
//右边部分归并完毕
arr[k]=tmpArr[i-left];i++;

 //左右两边比较(从小到大排的)  
  }else if(tmpArr[i-left]>tmpArr[j-left]){
  arr[k]=tmpArr[j-left];j++;
  } else { 
   arr [k] = tmpArr [i-left]; 我++; 

}} public static void main(String [] args){int [] arr = new int [] {10,4,6,3,8,2,5,111,233,5,5,7,7,0};} fenJie (ARR,0,arr.length-1); 的System.out.println(“———————-”); 的的System.out.println(Arrays.toString(ARR)); }}“

猜你喜欢

转载自blog.csdn.net/qq_38844040/article/details/80022979