[算法] 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