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

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

前后指针法

是指对于一个数组,定义前后各一个指针(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;
    }
相关推荐
云栖梦泽2 小时前
易语言开发从入门到精通:进阶篇·网络爬虫与数据采集分析系统深度实战
开发语言
imuliuliang2 小时前
怎么下载安装yarn
java
aini_lovee2 小时前
MATLAB圆锥滚子轴承滚子参数分析程序
人工智能·算法·matlab
曹牧2 小时前
在 Eclipse 中配置 Maven 和 Gradle 项目以支持增量打包
java·eclipse·maven
lsx2024062 小时前
XSLT `<sort>` 元素详解
开发语言
_olone2 小时前
牛客每日一题:显生之宙(Java)
java·开发语言·算法·牛客
Sirens.2 小时前
Java 包装类、泛型与类型擦除
java·开发语言·javac
嫂子开门我是_我哥3 小时前
心电域泛化研究从0入门系列 | 第二篇:心电信号预处理全攻略——扫清域泛化建模的第一道障碍
人工智能·算法·ecg
小光学长3 小时前
基于ssm的膳食健康管理系统e6whl4q7(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·开发语言·数据库·学习·ssm
java1234_小锋3 小时前
Java高频面试题:Redis到底支不支持事务啊?
java·redis·面试