码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法THREE:归并排序MergeSort

时间:2014-12-24 21:28:15      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:

 1 /**
 2  *归并排序思路:分治法思想  O(nlogn)
 3  *        把数组一分为二,二分为四
 4  *         四和为二,二和为一
 5  *        
 6  */
 7 
 8 /**
 9  * 归并排序主方法
10  *@params   待排序的数组
11  *@params   初始位置
12  *@params   最终位置
13  */
14 
15 public  class  MergeSort
16 {
17     public  static  void   mergeSort(int[] resouceArr, int  begin  ,  int  end )
18     {
19         if  ( begin  <   end  )    
20         {
21             int  middle  = ( begin + end ) / 2 ;
22             mergeSort( resouceArr ,  begin  ,  middle );
23             mergeSort( resouceArr ,  middle + 1 , end );
24             _merge( resouceArr , begin , middle , end );
25         }
26     }
27     /**
28      *合并两个已经排好序数组的方法
29      *由mergeSort()调用,定义为private,命名以下划线开头
30      */
31     private  static  void  _merge(int[] arr  ,  int  begin  ,  int  middle  ,  int  end  )
32     {
33         //获得左数组大小,右数组大小
34         int  leftArrLength  =  middle -  begin  +  1 ; 
35         int  rightArrLength =  end  -  middle  ;
36         //申请空间
37         int[] leftArr = new int[leftArrLength + 1];
38         int[] rightArr = new int[rightArrLength + 1];
39         //初始化数组的值(把原数组的值一个一个复制quickArr到新数组中)
40         for( int i = 0  ; i  <  leftArrLength  ;  i++)
41         {
42             leftArr[i] = arr[begin + i] ;
43         }    
44         for( int j = 0  ; j  <  rightArrLength ;  j++)
45         {
46             rightArr[j] = arr[middle + j + 1] ;
47         }
48         //哨兵,放在最后
49         leftArr[leftArrLength] = 65536 ;
50         rightArr[rightArrLength] = 65536 ;
51 
52         int  i  =  0  ;  
53         int  j  =  0  ; 
54         for(int k = begin ; k <= end  ;  k++ )
55         {
56             if( leftArr[i] <= rightArr[j] )
57             {
58                 arr[k] = leftArr[i] ;
59                 i = i + 1 ; 
60             }
61             else
62             {
63                 arr[k] = rightArr[j];
64                 j = j + 1 ; 
65             }            
66         }    
67     }    
68 }

 

排序算法THREE:归并排序MergeSort

标签:

原文地址:http://www.cnblogs.com/fubinhnust/p/4183289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!