【排序】快速排序(前后指针法)—— 考的最少的一种算法

以从小到大的顺序进行说明。

前后指针法

是指对于一个数组,定义前后各一个指针(prev 和 cur)

  • prev用于卡一个比基准值大的值进行交换
  • cur用于向前遍历出比基准值小的,和prev进行交换

图解

  1. 初始化
  2. 选出基准值4
  • 如果cur 所在的值比基准值小,那就++prev,看prev是否与 cur 在同一个位置(是一个位置那就还不到交换的时候,说明刚到这个比基准值大的区间,要开始让cur往后走,确定这个大区间有多长了)
  • 如果 cur 的值要比4大,需要扩大大区间的范围,但是不++prev,prev就是大区间的起始位置。




    再次进行交换
    此后都是比基准值大的,只需让cur++>
    交换prev 和基准位置(left)的值,完成一次调整

代码

java 复制代码
private int partationRearPrev(int[] array, int left, int right) {
        int key = array[left];
        int prev = left;
        int cur = prev + 1;
        // 取到等号才能遍历完
        while (cur <= right) {
            // 先让prev 向前走,但是和cur 没有位置上的距离,那就不换
            // 和基准值进行比较
            if (array[cur] < array[left]) {
                swap(array, cur, prev);
            }
            cur++;
        }
        // 将分界线置于中间
        swap(array, left, prev);
        // prev就是分界线
        return prev;
    }
相关推荐
三氧化真6 分钟前
设计模式-装饰者模式
java·设计模式
抚月code7 分钟前
乐观锁、悲观锁及死锁
java
XXXJessie10 分钟前
c++278函数指针
java·c++·算法
小胡不加班12 分钟前
2024.09.22 leetcode 每日一题
算法·leetcode·职场和发展
GGBondlctrl16 分钟前
【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作(超详解)
java·开发语言·thread类的构造方法·thread类的属性·启动线程·终止线程·等待线程
机器不会学习CL18 分钟前
时序预测|基于灰狼优化LightGBM的时间序列预测Matlab程序GWO-LightGBM 单变量和多变量 含基础模型
开发语言·神经网络·matlab·数据挖掘·回归·时间序列·智能优化
不会敲代码的VanGogh19 分钟前
【iOS】——JSONModel源码
开发语言·学习·ios·objective-c
落落落sss22 分钟前
项目集成sharding-jdbc
android·java·数据库·spring·mybatis
鱼跃鹰飞25 分钟前
大厂面试真题-Kafka如何保证消息不丢失
分布式·算法·面试·职场和发展·kafka
WolvenSec25 分钟前
C/C++逆向:switch语句逆向分析
c语言·开发语言·c++·安全·网络安全