/**
  *归并排序思路:分治法思想  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 ;
             }
         }
     }
 }

排序算法THREE:归并排序MergeSort的更多相关文章

  1. Java常见排序算法之归并排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. 排序算法之归并排序(Mergesort)解析

    转自:http://www.cnblogs.com/ayqy/p/4050452.html   一.归并排序的优缺点(pros and cons) 耗费心思来理解它,总要有个理由吧: 归并排序的效率达 ...

  3. 【排序算法】归并排序算法 Java实现

    归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 基本思想 可以将一组数组分成A,B两组 依次类推,当分出来的小组只有一 ...

  4. 【DS】排序算法之归并排序(Merge Sort)

    一.算法思想 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法的一个非常典型的应用,指的是将两个已经排序的序列合并成一个序列的操作.其归并思想如下: 1)申请空间,使其大小为两个已经 ...

  5. 我的Java开发学习之旅------>Java经典排序算法之归并排序

    一.归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列 ...

  6. 我的Java开发学习之旅------&gt;Java经典排序算法之归并排序

    一.归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是採用分治法(Divide and Conquer)的一个很典型的应用.将已有序的子序列合并,得到全然有序的序列.即先使每一个子序列 ...

  7. 排序算法——QuickSort、MergeSort、HeapSort(C++实现)

    快速排序QuickSort template <class Item> void quickSort (Item a[], int l, int r) { if (r<=l) ret ...

  8. C++编程练习(15)----“排序算法 之 归并排序“

    归并排序 归并排序(Merging Sort)的原理: 假设初始序列含有 n 个记录,则可以看成是 n 个有序的子序列,每个子序列的长度为1,然后两两归并,得到 [n/2] ([ x ] 表示不小于 ...

  9. 数据结构与算法之PHP排序算法(归并排序)

    一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...

随机推荐

  1. Castle IOC FOR MVC 使用方法

    Castle Web.API 使用方法 一.创建 WindsorActivator 继承 IHttpControllerActivator public class WindsorActivator ...

  2. android图片处理方法(不断收集中)

    //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArr ...

  3. 自动化分析工具PSSDIAG

    微软有个内部工具--PSSDIAG,它能收集非常多的信息,仅需要简单的配置和操作步骤. 下载地址: http://diagmanager.codeplex.com 默认安装路径: C:\Program ...

  4. 【汉诺塔问题】UVa 10795 - A Different Task

    [经典汉诺塔问题] 汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上.有一个和尚想把这64个盘子从A座移到B座,但每次只能允许移动 ...

  5. mongodb学习相关网址

    1.MongoDB官网 https://www.mongodb.org 2.MongoDB教程 http://www.yiibai.com/mongodb 3.MongoDB教程http://www. ...

  6. php实现比较两个字符串日期大小的方法

    <?php function dateBDate($date1, $date2) { // 日期1是否大于日期2  $month1 = date("m", strtotime ...

  7. Thinkphp kindeditor 内容转义

    参考了:[解决]ThinkPHP整合Html编辑器时出现自动转义的问题 遇到问题也是保存到数据库中的内容,会转义成“\"” 使用 $data['content'] = stripslashe ...

  8. Tinymce4 中Ajax多次加载时,会出现菜单在第二次进入时,显示的下拉菜单在左上角

    在项目中,ajax多次导入tinymce的js包 参考了: Having issues with Multiple AJAX refresh and TinyMCE load page with ti ...

  9. JDBC与ODBC的区别与应用

    jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...

  10. Sqlserver 安装

    安装环境: SqlServer版本:Sql Server 2008 (安装包您应该已有准备) =============以下开始安装,多图,基本软件操作不做太多说明,注意查看图片=========== ...