/**
  *归并排序思路:分治法思想  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. 在artTemplate的标签中使用外部函数的方法

    第一步,声明函数,并将函数作为data对象的属性.例如: var resArray = new Array(); function beforeRender(data) { //addToArray为 ...

  2. ME21N/ME22N/ME23N屏幕增强BADI ME_GUI_PO_CUST

    最近想更深入学习下classic BADI, 以前没玩过BADI屏幕增强, 所以决定玩一下. 这次的屏幕增强主要用到两个BADI: ME_GUI_PO_CUST和ME_PROCESS_PO_CUST ...

  3. N个数字中随机取m个数子,不重复

    <script> function rand_nums(min,max,count){ var arr = []; for(var i=min;i<max;i++){ arr.pus ...

  4. 自定义控件(视图)1期笔记02:View的绘制流程

    1. 引言: 来自源码的3个方法: (1)public final void measure():测量,用来控制控件的大小,final不建议覆写 (2)public void layout():布局, ...

  5. css实现响应式全屏背景

    利用css中 background-size:cover  填充整个viewport 注意: 一张背景图像素5000px*5000px在pc端 缩放都基本满足要求 不会出现模糊失真: 但是在移动端使用 ...

  6. linux服务器上apache+php独立于mysql server单独部署

    1. mysql client 2. libmysqlclient-devel 3. PDO_MYSQL

  7. 介绍一些适用于 Web 开发者的 Atom 编辑器插件

    Atom 的社区很繁荣,有着丰富的扩展/插件(packages).安装 Atom 的 Package 非常简单,可以在编辑器的偏好设置里面安装,也可以在命令行中使用 apm 命令来安装. 在介绍适用于 ...

  8. Javascript实现图片无缝滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. JMS简介

    任何一个系统从整体上来看,其实质就是由无数个小的服务或事件(我们可以称之为事务单元)有机地组合起来的.对于系统中任何一个比较复杂的功能,都是通过调用各个独立的事务单元以实现统一的协调运作而实现的.现在 ...

  10. alert

    先别着急测试,来猜测一下下面一行代码执行的结果 alert(alert(1234567)); 此刻,我自己还不是不太理解 我的分析是这样: alert() 是window下面的一个方法 alert(1 ...