算法排序---快速排序

快速排序是一个很普遍的也很重要的排序方法,在面试中是经常问到一个排序方法。

快速排序是采用分而治之的方法运用到排序中的典型例子。思想是,通过一个枢轴(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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值