归并排序(Java)

 

package Sort;

import java.util.Arrays;

/**
 * @author lxy
 * @version 1.0
 * @date 2020/10/10 20:51
 */
public class MergeSort {
    public static void main(String[] args) {
        int[] arr = new int[]{1,13,24,26,2,15,27,38,16,-1};
        //int mid = (arr.length -1)/2;
        int[] temp = new int[arr.length];
        //MergeSort.merge(arr,temp,0, mid+1,arr.length-1);
        MergeSort.mergeSort(arr,temp,0, arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public static void mergeSort(int[] arr,int[] temp ,int left ,int right){
        if (left<right){
            int center  = (left+right)/2;
            //递归对第一部分进行排序
            mergeSort(arr,temp,left,center);
            //递归对第二部分进行排序
            mergeSort(arr,temp,center+1,right);
            //合并
            merge(arr,temp,left,center+1,right);
        }
    }
    /**
     * 归并排序分析
     * @param arr : 传入的数组
     * @param temparr : 临时数组;存储临时数组值
     * @param leftstart : 左半部分(第一部分)初始化索引
     * @param rightEnd : 数组结尾
     * @param rightStart :第二部分开始
     */
    public static void merge(int[] arr ,int[] temparr , int leftstart ,int rightStart,int rightEnd){
        int leftEnd = rightStart-1;
        int tempStart = leftstart;
        while (leftstart<=leftEnd&&rightStart<=rightEnd){
            //第一部分的某个值小于第二部分某个值;则将第一部分中的值放入临时数组;并将第一部分下标+1
            if (arr[leftstart]<arr[rightStart]){
                temparr[tempStart++] = arr[leftstart++];
            }
            //第二部分的某个值小于第一部分某个值;则将第二部分中的值放入临时数组;并将第二部分下标+1
            else if (arr[leftstart]>arr[rightStart]){
                temparr[tempStart++] = arr[rightStart++];
            }
        }
        //如果第一部分有剩余的值;则将剩余值依次放入临时数组
        while(leftstart<=leftEnd){
            temparr[tempStart++] = arr[leftstart++];
        }
        //如果第二部分有剩余的值;则将剩余值依次放入临时数组
        while(rightStart<=rightEnd){
            temparr[tempStart++] = arr[rightStart++];
        }
        int t=0;
        int T=0;
        //将临时数组复制到原始数组
        while (T <=rightEnd){
            arr[T] = temparr[t];
            T+=1;
            t+=1;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值