@auther 吴星辰(https://me.csdn.net/weixin_43504535)
归并排序介绍
思路图解
再来看看置理阶段
直接贴代码
/**
-
@Filename
-
@auther 吴星辰;
-
@data 2019/8/20 14:50;
-
@Descripion 归并算法
-
也就是分置的一般表现形式
-
@Version 1.1.1
-
@Function
-
@History
*/
public class MergeSort {public static void main(String[] args) {
int a[]={8,4,5,7,1,3,6,2};
int []temp=new int[a.length];
merger(a,0,7,temp);
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}}
//分置
public static void merger(int []a ,int left,int right,int []temp){
if (right>left){
int mid=(left+right)/2;
//拆左
merger(a,left,mid,temp);
//拆右
merger(a,mid+1,right,temp);
//合并
mergeSort(a,left,mid,right,temp);
}
}//合并的方法
public static void mergeSort(int a[],int left,int midht,int right,int temp[]){
int i=left; //左侧的起始下标
int j=midht+1; //右侧的起始下标
int tempIndex=0;//中间数组的起始下标
while (i<=midht&&right>=j){
if (a[i]<=a[j]){
temp[tempIndex++]=a[i++];}else{ temp[tempIndex++]=a[j++]; } } while (j<=right){ temp[tempIndex++]=a[j++]; } while (i<=midht){ temp[tempIndex++]=a[i++]; } int t=0; int tempLeft = left; while(tempLeft <= right) { a[tempLeft++] = temp[t++]; }
}
}