归并排序思路

/**
 *归并排序思路:分治法思想  O(nlogn)
 *        把数组一分为二,二分为四
 *         四和为二,二和为一
 *        
 */

/**
 * 归并排序主方法
 *@params   待排序的数组
 *@params   初始位置
 *@params   最终位置
 */

public  class  MergeSort
{
    public  static  void   mergeSort(int[] resouceArr, int  begin  ,  int  end )
    {
        if  ( begin  <   end  )    
        {
            int  middle  = ( begin + end ) / 2 ;
            mergeSort( resouceArr ,  begin  ,  middle );
            mergeSort( resouceArr ,  middle + 1 , end );
            _merge( resouceArr , begin , middle , end );
        }
    }
    /**
     *合并两个已经排好序数组的方法
     *由mergeSort()调用,定义为private,命名以下划线开头
     */
    private  static  void  _merge(int[] arr  ,  int  begin  ,  int  middle  ,  int  end  )
    {
        //获得左数组大小,右数组大小
        int  leftArrLength  =  middle -  begin  +  1 ; 
        int  rightArrLength =  end  -  middle  ;
        //申请空间
        int[] leftArr = new int[leftArrLength + 1];
        int[] rightArr = new int[rightArrLength + 1];
        //初始化数组的值(把原数组的值一个一个复制quickArr到新数组中)
        for( int i = 0  ; i  <  leftArrLength  ;  i++)
        {
            leftArr[i] = arr[begin + i] ;
        }    
        for( int j = 0  ; j  <  rightArrLength ;  j++)
        {
            rightArr[j] = arr[middle + j + 1] ;
        }
        //哨兵,放在最后
        leftArr[leftArrLength] = 65536 ;
        rightArr[rightArrLength] = 65536 ;

        int  i  =  0  ;  
        int  j  =  0  ; 
        for(int k = begin ; k <= end  ;  k++ )
        {
            if( leftArr[i] <= rightArr[j] )
            {
                arr[k] = leftArr[i] ;
                i = i + 1 ; 
            }
            else
            {
                arr[k] = rightArr[j];
                j = j + 1 ; 
            }            
        }    
    }    
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值