Java-归并排序

@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++];
       }
    

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值