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

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

前后指针法

是指对于一个数组,定义前后各一个指针(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;
    }
相关推荐
智慧物业老杨7 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
萧西待水8 小时前
奥赛一本通 1447 靶形数独
算法·深度优先
星空10 小时前
金蝶苍穹build.gradle配置
java·build.gradle
泯泷10 小时前
那段文字是谁删的?Yjs 14 正式版之前,一套删除归属方案的实现与边界
前端·javascript·算法
hold?fish:palm10 小时前
34 合并K个升序链表
javascript·算法·链表
C++ 老炮儿的技术栈11 小时前
我们在设计tcp协议时,要传一个字符串过去,报文:头十长度十内容,是否要把‘\0‘也填入,长度是否包含‘\0‘
开发语言·数据结构·c++·mfc·c
传奇开心果编程12 小时前
【Rust入门练中学】第2课:变量、可变性与常量
开发语言·学习·rust
zr想努力12 小时前
从0开始配置Perforce4环境
开发语言
步行cgn12 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
Navigator_Z13 小时前
LeetCode //C - 1252. Cells with Odd Values in a Matrix
c语言·算法·leetcode