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

排序算法TWO:快速排序QuickSort

时间:2014-12-24 21:22:47      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

 1 import  java.util.Random ; 
 2 
 3 /**
 4  *快速排序思路:用到了分治法
 5  *    一个数组A[0,n-1] 分解为三个部分,A[0,p - 1] , A[p] , A[p + 1, n-1]
 6  *    递归调用快速排序,对A[0,p - 1]和A[p + 1,n-1]进行排序
 7  *
 8  */
 9 public  class  QuickSort
10 {
11     /**
12      *快速排序主方法
13      *
14      */
15     public  static  void  quickSort(int[] resouceArr , int  begin , int  end)
16     {
17         if( begin  <  end )
18         {
19             int  part = _partition(resouceArr , begin , end );
20             quickSort(resouceArr , begin , part - 1 );
21             quickSort(resouceArr , part + 1  , end );
22 
23         }
24     }
25 
26     /**
27      *随机化快速排序主方法
28      *
29      */
30     public  static  void  randomizedQuickSort(int[] resouceArr , int  begin , int  end)
31     {
32         if( begin  <  end )
33         {
34             int  part = _randomizedPartition(resouceArr , begin , end );
35             quickSort(resouceArr , begin , part - 1 );
36             quickSort(resouceArr , part + 1  , end );
37 
38         }
39     }
40 
41     /**
42      *随机算法快速排序:把A[p]随机化,不限于数组尾部,把数组A[p]与数组尾部的数调换
43      *
44      */
45     private  static  int   _randomizedPartition(int[] arr , int begin , int end )
46     {
47         //随机函数产生随机数
48         Random  r = new Random();
49         int  i =  r.nextInt(end + 1) + begin ;
50         int  temp = arr[end] ;
51         arr[end] = arr[i] ; 
52         arr[i] = temp ;
53         
54         return  _partition(arr , begin  ,  end  );        
55     }
56 
57     /**
58      *partition对部分数组进行原址重排
59      *
60      */
61     private  static   int  _partition(int[] arr , int  begin , int end)
62     {
63         //选取一个元素作为分界元素,这里选取的是最后一个元素
64         int  part = arr[end] ; 
65         //i从-1开始,j从1开始
66         int  i  =  begin -1 ; 
67         for(int j = begin ; j <=  end - 1 ; j++)
68         {
69             if(arr[j] <= part)
70             {
71                 i = i + 1 ;
72                 int  temp = arr[i];
73                 arr[i] = arr[j];
74                 arr[j] = temp ; 
75             }
76         }
77         int  temp1 = arr[i+1];
78         arr[i+1] = arr[end];
79         arr[end] = temp1 ; 
80         return  i + 1 ;
81     }
82     
83 }

 

排序算法TWO:快速排序QuickSort

标签:

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

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