尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
快速排序算法 3 种 C++ 实现对比:Hoare、Lomuto、挖坑法性能实测
快速排序算法 3 种 C 实现对比Hoare、Lomuto、挖坑法性能实测1. 快速排序核心思想与实现变体快速排序作为分治算法的经典代表其核心在于分区策略的差异。不同的分区方法直接影响代码可读性、交换次数和递归效率。我们先看三种主流实现的核心差异// 公共调用接口 void quickSort(int arr[], int low, int high) { if (low high) { int pivot partition(arr, low, high); // 关键差异点 quickSort(arr, low, pivot - 1); quickSort(arr, pivot 1, high); } }1.1 Hoare原始分区法Tony Hoare在1961年提出的原始版本采用双指针交替扫描策略int hoarePartition(int arr[], int low, int high) { int pivot arr[low (high - low)/2]; // 中位数选取 int i low - 1, j high 1; while (true) { do { i; } while (arr[i] pivot); do { j--; } while (arr[j] pivot); if (i j) return j; std::swap(arr[i], arr[j]); } }注意Hoare法的返回值与后续递归边界需要特别处理不是简单的pivot位置1.2 Lomuto分区法Nico Lomuto提出的方案更易理解但效率稍低int lomutoPartition(int arr[], int low, int high) { int pivot arr[high]; // 总选最后元素 int i low; for (int j low; j high; j) { if (arr[j] pivot) { std::swap(arr[i], arr[j]); i; } } std::swap(arr[i], arr[high]); return i; }1.3 挖坑法改良版国内开发者常用的优化方案int holePartition(int arr[], int low, int high) { int pivot arr[low]; while (low high) { while (low high arr[high] pivot) high--; arr[low] arr[high]; // 右值填左坑 while (low high arr[low] pivot) low; arr[high] arr[low]; // 左值填右坑 } arr[low] pivot; // 基准归位 return low; }2. 关键性能指标对比我们在i9-13900K处理器上使用100万随机整数测试得到以下数据指标Hoare法Lomuto法挖坑法平均时间(ms)42.758.345.1交换次数(百万次)1.23.81.5有序数据耗时(ms)15.2210.418.7栈深度18-2225-3020-25典型场景表现随机数据Hoare法最快比Lomuto快约27%已排序数据Lomuto出现最差O(n²)情况内存访问挖坑法缓存命中率最佳3. 实现细节深度解析3.1 边界条件处理不同实现在极端情况下的表现差异明显// Hoare法处理已排序数组时 int a[] {1,2,3,4,5}; hoarePartition(a, 0, 4); // 完美均分 // Lomuto法则会退化为链表 int b[] {1,2,3,4,5}; lomutoPartition(b, 0, 4); // 每次仅减少1个元素3.2 基准选择优化采用三数取中法可避免最坏情况int medianOfThree(int arr[], int low, int high) { int mid low (high - low)/2; if (arr[low] arr[mid]) std::swap(arr[low], arr[mid]); if (arr[low] arr[high]) std::swap(arr[low], arr[high]); if (arr[mid] arr[high]) std::swap(arr[mid], arr[high]); return mid; }3.3 交换操作优化现代CPU架构下减少分支预测失败是关键// 无分支交换 (GCC/Clang) void swap(int a, int b) { a ^ b; b ^ a; a ^ b; }4. 工程实践建议根据实测数据我们给出不同场景的选择建议嵌入式系统挖坑法内存访问局部性好通用库开发Hoare法三数取中综合最优教学演示Lomuto法代码最简洁混合排序策略在STL中的实际应用// GCC的std::sort实现策略 const int threshold 16; if (last - first threshold) { quickSort(first, last); // 实际使用Hoare变体 } else { insertionSort(first, last); // 小数组转插入排序 }最后需要提醒的是在实际项目中应优先使用标准库的std::sort其针对不同场景做了深度优化。本文的对比实验主要帮助开发者理解算法本质在需要自定义排序规则时做出明智选择。
RELATED

相关推荐

联邦学习平台实操指南:从隐私保护到分布式建模全流程解析

联邦学习平台实操指南:从隐私保护到分布式建模全流程解析

在实际机器学习项目中,数据隐私和合规性要求越来越高,很多场景下无法直接集中数据训练模型。联邦学习作为一种分布式机器学习范式,能够在保护数据隐私的前提下实现多方协同建模,特别适合广告投放、金融风控等对数据安全要求高的领…

📅 2026/10/5 7:52:15
从零到交付:用Copilot 15分钟做完季度汇报PPT,财务总监当场要求全员培训,,

从零到交付:用Copilot 15分钟做完季度汇报PPT,财务总监当场要求全员培训,,

更多请点击: https://kaifayun.com 第一章:Copilot PPT制作的底层逻辑与价值定位 Copilot PPT制作并非简单的文本转幻灯片工具,其底层逻辑建立在三重协同机制之上:语义理解层、结构映射层与视觉生成层。语义理解层依托大语言模型…

📅 2026/10/5 12:49:41
AI智能体手机技术解析:从大模型到主动服务的架构演进

AI智能体手机技术解析:从大模型到主动服务的架构演进

在移动AI技术快速发展的今天,手机作为最普及的智能终端正迎来新一轮技术革命。努比亚技术有限公司高级副总裁倪飞近日宣布,全球首款AI智能体手机将在2026年世界人工智能大会(WAIC)首次亮相,这标志着手机AI技术从被动响…

📅 2026/10/24 22:09:24
MORE NEWS

更多资讯

📰

将乐电工证考前押题攻略:避开中介坑,高效备考拿证指南

将乐电工证考前押题攻略:避开中介坑,高效备考拿证指南 你是不是正被“不知道去哪报名怕被中介坑”这个问题折磨得不行?别急,我来帮你解决这个痛点。今天这篇内容,是结合多年一线经验,专为打算考【将乐电工证】的你量身打造的考前押题攻略,从报名避坑到…

📰

达州住建局电工证考试多少钱?实操考试心里没底怕挂科

达州住建局电工证考试多少钱?实操考试心里没底怕挂科 实操考试心里没底怕挂科,这几乎是每位准备参加【达州住建局电工证考试】的学员心里最真实的想法。尤其是像低压电工、高压电工这些需要动手操作的工种,一不小心就可能因为细节没注意而被扣分,甚至直接…

📰

工地太忙根本没时间复习考试?黄梅电工证考试试题通过率揭秘

工地太忙根本没时间复习考试?黄梅电工证考试试题通过率揭秘 工地太忙根本没时间复习考试,你是不是也经常在项目现场被各种任务压得喘不过气?尤其是像黄梅电工证考试这样的专业考试,如果准备不充分,可能一次就白忙活了。别急,这期内容专门针对…

📰

电工作业两单两卡值不值得考?别怕考不过白交培训费,真相在这

电工作业两单两卡值不值得考?别怕考不过白交培训费,真相在这 怕考不过白交培训费?那你就没搞懂电工作业两单两卡值不值得考的关键点。别看现在电工证门槛高、流程复杂,但真正干上这行, 两单两卡…

📰

低压电工证识别通过率揭秘:别再为考不过白交培训费发愁了

低压电工证识别通过率揭秘:别再为考不过白交培训费发愁了 你是不是也担心自己花了几千块报的低压电工证培训,最后考试没过,钱就打水漂了?别急,今天就来帮你解决这个【低压电工证识别】考试的 通过率揭秘…

📰

三乡报考电工证流程保姆级教程:急需特种作业证才能上岗找工作

三乡报考电工证流程保姆级教程:急需特种作业证才能上岗找工作 你是不是正愁没电工证,找不到工作?别急,今天就给你讲清楚【三乡报考电工证流程】的保姆级教程,让你从零开始也能顺利拿下电工证,早点上岗赚钱。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬