快速排序是一个很普遍的也很重要的排序方法,在面试中是经常问到一个排序方法。
快速排序是采用分而治之的方法运用到排序中的典型例子。思想是,通过一个枢轴(pivot)元素将n个元素的序列分为两列,一列元素全部比pivot元素小,一列元素全部比pivot元素大。然后对着两列分别进行快速排序,等将此两列进行排序完成之后,则整个序列就已经是完整的序列。
//分区,即按照pivot进行分成两个序列
private int partition(Objtct[] r,int low,int high){
Object pivot=r[low]; //使用r[low]作为枢轴元素
while(low<high){ //从两端交替向内扫描
while(low<high&&strategy.compare(r[high],pivot)>=0)high--;
r[low]=r[high]; //将比pivot小的元素移向低位
while(low<high&&strategy.compare(r[low],pivot)<=0)low++;
r[high]=r[low]; //将比pivot大的元素移向高端
}
r[low]=pivot; //将最低位设置为枢轴
return low; //返回枢轴元素位置
}
//进行排序,递归
public void quickSort(Object[] r,int low,int high){
if(low<high){
int pa=pritition(r,low,high);
quickSort(r,low,pa-1);
quickSort(r,pa+1,high);
}
}