算法基础-快速排序(Java)及题目拓展

本文介绍了快速排序算法的核心思想,强调了先从后面找基准的重要性,并探讨了如何在快速排序基础上解决找升序排列的第k个数和最小的前x个数的问题。通过改造快速排序代码,实现寻找特定序列的高效方法。
摘要由CSDN通过智能技术生成

中心思想:选定一个基准(通常是第一个数),要把比他大的放他后面,比他小的放他前面。

为了提高效率,用两个游标i和j,j从尾开始找到第一个比基准小的,i从头开始找到第一个比基准大的,找到后把i、j位置的数交换。i、j继续移动直到他们相遇,相遇位和基准位交换,这时,基准位左边都比他小,右边都比他大,第一次排完。然后基准位左右两个序列递归前面的处理。

public static void quickSort(int[] a,int start ,int end){
    int index = start;//基准数位置
    int temp;//交换数据时用的临时变量
    if(start>=end) return;//start=end说明基准位、i、j重合,无需移动;start>end可以说明这两个数都没有越界(上一局start=i+1不会越界,因为end=上一次的end,保证了start<end就能保证start不越界;另一种情况同理)
    int i=start,j = end;//i从start开始,否则用+1可能越界!
    while(i<j){//循环,直到i=j
        while(a[j]>=a[index]&&i<j) j--;//找到第一个比基准位小的位置;注意!!j在变化,所以每次移动都要判断相遇没有
        while(a[i]<=a[index]&&i<j) i++;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值