/**
  *归并排序思路:分治法思想  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. yarn 集群部署,遇到的问题小结

    版本号信息: hadoop 2.3.0  hive 0.11.0 1. Application Master 无法訪问     点击application mater 链接,出现 http 500 错 ...

  2. C++ 变量初始化规则

    1.定义变量的时候,如果没有初始化,它的值是什么呢? 它的值取决于变量的类型和变量定义的位置. 2.考虑基本类型的变量,定义时没有初始化.如果定义在方法外部,初始化为0,如果定义在方法内部,不被初始化 ...

  3. redis实现spring-redis-data的入门实例

    redis的客户端实现.主要分为spring-redis-data .jredis. 记录下spring-redis-data的学习心得:spring-redis-data 中我目前主要用了它的存.取 ...

  4. Tomcat 集群

    1.  前言 该篇中测试的机器发生了变更,在第一篇中设置的Apache  DocumentRoot "d:/deployment"修改为了DocumentRoot d:/clust ...

  5. forward_list例子

    9.28 编写函数,接受一个forward_list<string>和两个string共三个参数.函数应在链表中查找第一个string,并将第二个string插入到紧接着第一个string ...

  6. [Effective C++ --022]将成员变量声明为private

    这一章并没有什么太多的内容,作者无非想告诉我们一件事:成员变量应该是private. 为此,他列举了以下的理由: 1.成员函数来返回成员变量是非常高效: 2.protected成员变量并不比publi ...

  7. 【暴力模拟】UVA 1594 - Ducci Sequence

    想麻烦了.这题真的那么水啊..直接暴力模拟,1000次(看了网上的200次就能A)后判断是否全为0,否则就是LOOP: #include <iostream> #include <s ...

  8. Oracle报错:ORA-01747: user.table.column, table.column 或列说明无效

    1.检查sql书写正确性 2.如果sql书写正确,则是由于数据库列名起的不好引起的,名字用到了数据库的关键字. 如果列很多,又不好确定是哪个列名使用了关键字,以下建议可供参考: 我用以下方法定位 se ...

  9. [Laravel] 获取执行的Sql

    获取数据库操作记录 $queries = DB::getQueryLog(); //取最后一条是 $lastSql = end($queries); 不过这样输出的,不是真正的sql,输出的是类似PD ...

  10. Spark1.2新特性概述

    http://mp.weixin.qq.com/s?__biz=MjM5NTc2MTg3Mw==&mid=201641685&idx=1&sn=1b75be3d774bb3f2 ...