当前位置: 首页 > news >正文

数据结构自学Day13 -- 快速排序--“前后指针法”

快速排序的 “前后指针法”(也称为“Hoare划分方案”或“双指针遍历法”)是一种实现 partition(划分) 的思路,它与“挖坑法”不同,利用两个指针分别扫描元素并交换,从而实现原地划分。

往期“快速排序算法回顾”:

快速排序--挖坑法
快速排序-- 分而治之

🧠 “前后指针”思想

“前后指针法”指的是:
用两个指针(cur 和 prev),一个扫描数组,一个标记小于 pivot 的“边界”,通过遍历和交换,把比 pivot 小的元素移到前面,比 pivot 大的放后面,最后把 pivot 放到中间。

🧩 思路详解

假设存在一个数组

  • 数组为 arr[left..right];

  • 选择 arr[right] 为基准值(pivot);

  • prev 初始化为 left - 1,指向已处理的最后一个小于 pivot 的元素

  • cur 从 left 开始遍历到 right - 1,用于寻找比pivot小的元素。

🤔思维导图

代码实现

int PartSort3(int* arr,int left,int right){assert(arr);int mid_index = get_midindex(arr,left,right);Swap(&arr[mid_index],&arr[right]);int key = arr[right];int prev = left-1;for(int cur = left;cur<right;++cur){if(arr[cur]<key){prev++;Swap(&arr[cur],&arr[prev]);}}//可选while循环// while (cur< right){//     if(arr[cur]<key)//     {//         prev++;//         Swap(&arr[cur],&arr[prev]);//     }//     cur++;// }prev++;Swap(&arr[right],&arr[prev]);return prev;
}

快速排序算法总结:

  1. 分而治之的排序思想(标准快排)

  2. 挖坑法(Hoare分区法)

  3. 前后指针法(Lomuto分区法)

它们本质上都基于快速排序的“分而治之”思想,但实现方式不同,影响效率与处理方式也有所区别

实现方式

本质思想

分区原理

枢轴选取

优势

劣势

适用场景

分而治之

框架思想

递归分为左右两部分

自由选择

算法核心思维,通用

本身不包含具体实现

统一指导各类快排

挖坑法

Hoare 分区法

左右指针互相填坑

一般选最左

交换少,性能好

易错,不能选两端作为枢轴

重复元素较多,追求效率

前后指针法

Lomuto 分区法

逐个遍历,用前后指针交换

一般选最右

逻辑清晰,容易写

交换次数多,性能略逊

学习入门、小数据或调试

http://www.xdnf.cn/news/1174951.html

相关文章:

  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP详解(下)
  • 电流、电压采集电路分析
  • 轻量化RTSP视频通路实践:采集即服务、播放即模块的工程解读
  • 【Windows命令手册】Windows中的常用命令,并与 Linux 做比较
  • Zookeeper学习专栏(七):集群监控与管理
  • FastGPT + Kymo:解锁企业专属知识库与智能体开发新体验
  • 【LeetCode 热题 100】78. 子集——(解法二)回溯+选哪个
  • Unity × RTMP × 头显设备:打造沉浸式工业远控视频系统的完整方案
  • AI营销核心技术解析:运作机制与行业应用实例
  • 炬森精密:缓冲滑轨的创新力量,重塑家居静音与安全新体验
  • 力扣MySQL(1)
  • 解构未来金融:深入剖析DeFi与去中心化交易所(DEX)的技术架构
  • 力扣(LeetCode) ——轮转数组(C语言)
  • Linux 723 磁盘配额 限制用户写入 quota;snap快照原理
  • GraphQL批量查询优化:DataLoader如何让数据库访问速度飞起来?
  • Android 测试全指南:单元测试与UI测试框架详解
  • 用马尔可夫模型进行自动驾驶安全分析
  • Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序
  • 【Linux系统编程】基础指令
  • MYSQL 笔记3
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 2025-07-23vscode+cline使用笔记
  • springcloud环境和工程搭建
  • AI 驱动与数字化技术双突破!华南Formnext展3D 打印开启智能制造新场景
  • 基于Seata的微服务分布式事务实战经验分享
  • 策略模式(Strategy Pattern)+ 模板方法模式(Template Method Pattern)的组合使用
  • android studio打包vue
  • 如何硬解析 .shp 文件中的几何体,拯救 .dbf、.shx 等文件缺失的 ESRI Shapefile 格式文件
  • .Net core 部署到IIS出现500.19Internal Server Error 解决方法
  • 变频器实习DAY12