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

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

前后指针法

是指对于一个数组,定义前后各一个指针(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;
    }
相关推荐
9稳几秒前
基于智能巡检机器人与PLC系统联动控制设计
开发语言·网络·数据库·嵌入式硬件·plc
crediks1 分钟前
MTGR(美团生成式推荐框架)总结文档
人工智能·深度学习·算法
im_AMBER1 分钟前
Leetcode 143 搜索插入位置 | 搜索二维矩阵
数据结构·算法·leetcode
小江的记录本2 分钟前
【Filter / Interceptor】过滤器(Filter)与拦截器(Interceptor)全方位对比解析(附底层原理 + 核心对比表)
java·前端·后端·spring·java-ee·前端框架·web
承渊政道2 分钟前
C++学习之旅【IO库相关内容介绍】
c语言·开发语言·c++·学习·macos·visual studio
小年糕是糕手4 分钟前
【35天从0开始备战蓝桥杯 -- Day5】
数据结构·数据库·c++·算法·蓝桥杯
Ronin3054 分钟前
【Qt窗口】Qt窗口
开发语言·qt·qt窗口
炸膛坦客5 分钟前
单片机/C/C++八股:(十七)C++ 中指针和引用的区别
c语言·开发语言·c++
weisian1517 分钟前
Java并发编程--16-ConcurrentHashMap演进:从分段锁到CAS+synchronized
java·hashmap·分段锁·cas+同步·longaddr思想
bbbb3657 分钟前
算法优化的多层缓存映射与访问调度模型的技术7
算法