尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/8/24 8:24:20
从零到交付:用Copilot 15分钟做完季度汇报PPT,财务总监当场要求全员培训,,

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

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

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

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

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

📅 2026/8/24 8:24:20
MORE NEWS

更多资讯

📰

S7-1200固件版本与博途下载冲突:判定逻辑、升级步骤与排查清单

简介:TIA博途中CPU固件版本与实际PLC固件不一致,是西门子S7-1200用户调试时经常遇到的下载障碍。这份文档面向PLC工程师与现场调试人员,围绕项目组态版本高于或低于实际固件两种情形,详细介绍了直接下载、升级PLC固件后下载以及老…

📰

AngularJS 与 Google Closure Compiler 集成指南:使用 Externs 进行类型检查与高级编译

AngularJS 与 Google Closure Compiler 集成指南:使用 Externs 进行类型检查与高级编译 【免费下载链接】angular.js AngularJS - HTML enhanced for web apps! 项目地址: https://gitcode.com/gh_mirrors/an/angular.js 导读 本文面向希望借助 Google Clos…

📰

ARP欺骗原理与防御实战:从中间人攻击到静态绑定

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

SBM模型Python实战:从数据清洗到效率可视化完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

COMSOL模拟二氧化碳驱替煤层气技术研究

1. 项目背景与核心价值在非常规天然气开发领域,二氧化碳驱替煤层气技术近年来备受关注。这项技术不仅能提高甲烷采收率,还能实现二氧化碳地质封存,具有显著的环保和经济效益。我们团队最近使用COMSOL Multiphysics软件完整模拟了这一物理化学…

📰

MiroFish群体行为仿真:Boids三规则、空间索引与LLM决策

第一次看到 MiroFish 这个名字,我脑子里蹦出来的画面是一缸鱼:几百条挤在一起,没有指挥官,没有全局地图,谁也不知道整体队形长什么样,可一遇到障碍物就自动分流,一遇到"捕食者"就整体…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬