Java实现并归排序

基本思想:
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:

这是我定义在一个方法类里边的代码,所以允许调用第一个方法,这样用的时候就特别方便,直接传一个数组就行

    public  static  void MersergeSort(int []nums)
    {
        int length=nums.length;
        int []temp=new int[length];
        int left=0;
        MersergeSort(nums,temp,0,length-1);
    }

    private   static  void  MersergeSort(int []nums,int[]temp,int left,int right)
    {
        if(left==right)//每当只有一个元素时就返回
        {
            return ;
        }
        int mid=(left+right)/2;
        MersergeSort(nums, temp, left, mid);   //左分治
        MersergeSort(nums, temp, mid+1, right);//右分治

        int begin1=left;
        int end1=mid;
        int begin2=mid+1;
        int end2=right;
        int j=left;

        while (begin1<=end1&&begin2<=end2)//如果有一边结束了就停止,剩下一边的值一定是大于排完的    
        {
            if(nums[begin1]<nums[begin2])
            {
                temp[j++]=nums[begin1++];
            }
            else
            {
                temp[j++]=nums[begin2++];
            }
        }
        while(begin1<=end1)               //寻找还未排完的一边
        {
            temp[j++]=nums[begin1++];
        }
        while(begin2<=end2)                  //寻找还未排完的一边
        {
            temp[j++]=nums[begin2++];
        }
        for(int i=left;i<=right;i++)        //将temp排完的数组拷贝回对应下标的nums数组
        {
            nums[i]=temp[i];
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值