数据算法之快速排序(quickSort)的Java实现

  本文的代码来自于《数据结构与算法(JAVA语言版)》,是笔者在网上找到的资料,非正式出刊版物。笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论。
  快速排序的基本思想是通过一个枢轴,将比枢轴小的数排在枢轴左边,将比枢轴大的数字排在枢轴右边,然后再对两边分别快速排序。


  如图所示
快速排序


输入:数据元素数组r,划分序列区间[low..high]
输出:将序列划分为两个子序列并返回枢轴元素的位置

private int partition(Object[] 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; //返回枢轴元素位置
}

输入:数据元素数组r,数组r 的待排序区间[low..high]
输出:数组r 以关键字有序

public void quickSort(Object[] r, int low, int high){
    if (low<high){
        int pa = partition(r,low,high);
        quickSort(r,low,pa-1);
        quickSort(r,pa+1,high);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值