/**
  *归并排序思路:分治法思想  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. POJ 2823 Sliding Window 线段树区间求和问题
  2. ASP.NET MVC HtmlHelper之Html.ActionLink
  3. IT荐书|10个最“牛叉”的代码注释
  4. memcached学习笔记5--socke操作memcached 缓存系统
  5. iOS7跳转AppStore地址
  6. MYBATIS报ORA-01745: 无效的主机/绑定变量名 异常
  7. OC中的self指针
  8. Linux Ubuntu 14.04安装LAMP(Apache+MySQL+PHP)网站环境
  9. pygame_第一个窗口程序
  10. 如何在自定义组件中使用v-model
  11. webpack打包样式代码去重
  12. __http原理__01__通信流程_消息格式
  13. Vue-devtools安装步骤
  14. 微信小程序页面跳转,带参数跳转
  15. c#: WebBrowser控制台输出
  16. python 简单的server请求
  17. 解决Run As -&gt; Java Application不能运行问题
  18. mybatis学习之路----批量更新数据两种方法效率对比
  19. 开源3D软件——大集合【转】
  20. 2018/03/16 echo、print_r、print、var_dump之间的区别

热门文章

  1. 数据库中DDL、DML、DCL和TCP概念
  2. 手机端overflow scroll卡顿的情况
  3. ExtJs自学教程(1):一切从API開始
  4. 学习笔记之JAVA多线程
  5. UNIX标准化及实现之选项
  6. BugZilla的安装过程简明教程
  7. JAVA_JSON
  8. inheritance,菱形继承, 虚继承,virtual
  9. ubuntu_scrapy 安装
  10. jQuery图片无缝滚动