您的位置:首页 > 产品设计 > UI/UE

[算法] Quick Sort

2015-08-30 14:08 453 查看
Quick Sort

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

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

public class QuickSort {

public QuickSort(){

}

private int getMiddle(int []data,int start,int end){
int left = start;
int right = end;
int pivot = data[left];
while(left<right){
while(left<right&&data[right]>=pivot) right--;
data[left]=data[right];
while(left<right&&data[left]<pivot) left++;
data[right]=data[left];
}
data[left]=pivot;
return left;
}
public void sort(int [] data,int start, int end){
if(start>=end) return;
int index = (int)((end - start +1)*Math.random());//尽量减少退化现象的出现
//swap the data in start and (index+start)
int tmp = data[start];
data[start]= data[index+start];
data[index+start]=tmp;
int mid = getMiddle(data,start,end);
sort(data,start,mid-1);
sort(data,mid+1,end);
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}


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

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

[1] /article/1422487.html

[2] /article/6580010.html

[3] /article/6579946.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: