F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

[算法] Quick Sort

Quick Sort

下面是快速排序的递归实现。

快速排序的一个问题是,可能面临退化的现象,也就是数据已经是排好序的,应对策略是对于第一个元素,即pivot的选择使用随机策略。

 

 1 public class QuickSort {
 2     
 3     public QuickSort(){
 4         
 5     }
 6     
 7     private int getMiddle(int []data,int start,int end){
 8         int left = start;
 9         int right = end;
10         int pivot = data[left];
11         while(left<right){
12             while(left<right&&data[right]>=pivot) right--;
13             data[left]=data[right];
14             while(left<right&&data[left]<pivot) left++;
15             data[right]=data[left];
16         }
17         data[left]=pivot;
18         return left;
19     }
20     public void sort(int [] data,int start, int end){
21         if(start>=end) return;
22         int index = (int)((end - start +1)*Math.random());//尽量减少退化现象的出现
23         //swap the data in start and (index+start)
24         int tmp = data[start];
25         data[start]= data[index+start];
26         data[index+start]=tmp;
27         int mid = getMiddle(data,start,end);
28         sort(data,start,mid-1);
29         sort(data,mid+1,end);
30     }
31     
32     public static void main(String[] args) {
33         // TODO Auto-generated method stub
34 
35     }
36 
37 }

对于快速排序的非递归实现可参考[2]

 kth largest element in an array 使用了类似快速排序的算法,可以参考[3]

[1] http://blog.csdn.net/wangkuifeng0118/article/details/7286332

[2] http://www.cnblogs.com/deepblueme/p/4764724.html

[3] http://www.cnblogs.com/deepblueme/p/4722129.html

posted on 2015-08-30 14:08  F_G  阅读(238)  评论(0编辑  收藏  举报