快速排序算法 3 种 C++ 实现对比:Hoare、Lomuto、挖坑法性能实测
📅 2026/7/12 7:53:38
👁️ 次浏览
快速排序算法 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其针对不同场景做了深度优化。本文的对比实验主要帮助开发者理解算法本质在需要自定义排序规则时做出明智选择。
在实际机器学习项目中,数据隐私和合规性要求越来越高,很多场景下无法直接集中数据训练模型。联邦学习作为一种分布式机器学习范式,能够在保护数据隐私的前提下实现多方协同建模,特别适合广告投放、金融风控等对数据安全要求高的领…
📅 2026/7/12 7:53:38
更多请点击:
https://kaifayun.com
第一章:Copilot PPT制作的底层逻辑与价值定位 Copilot PPT制作并非简单的文本转幻灯片工具,其底层逻辑建立在三重协同机制之上:语义理解层、结构映射层与视觉生成层。语义理解层依托大语言模型…
📅 2026/7/12 7:53:38
在移动AI技术快速发展的今天,手机作为最普及的智能终端正迎来新一轮技术革命。努比亚技术有限公司高级副总裁倪飞近日宣布,全球首款AI智能体手机将在2026年世界人工智能大会(WAIC)首次亮相,这标志着手机AI技术从被动响…
📅 2026/7/12 7:53:38
智能车赛道元素识别三大方案深度解析:从188120图像处理到补线策略优化在智能车竞赛的算法设计中,赛道元素识别始终是决定车辆性能的关键环节。面对仅188120像素的低分辨率图像,如何准确识别十字、圆环、P字等复杂元素,并实现高效的…
📅 2026/7/12 9:08:01
Cisco Packet Tracer实战:基于255.255.255.192掩码的四子网高级路由实验 在网络工程的学习过程中,子网划分与路由配置是构建网络基础架构的核心技能。本文将带您深入探索如何在Cisco Packet Tracer中实现一个包含四个子网的复杂网络环境,重点…
📅 2026/7/12 9:08:01
SCAR流程数字化实战:3步集成QMS与ERP,供应商响应效率提升40%在制造业与医疗器械行业,供应商质量问题往往成为制约生产效率和产品质量的关键瓶颈。传统SCAR(供应商纠正措施请求)流程依赖纸质文档和邮件往来,…
📅 2026/7/12 9:08:01
1. 高压安全隔离系统概述在工业控制和电力电子领域,高压安全隔离是一个至关重要的设计环节。使用ISOM8710数字隔离器和dsPIC33EP512MU810微控制器构建的高压安全隔离系统,能够有效解决高电压环境下信号传输的安全性和可靠性问题。这套方案特别适用于电力…
📅 2026/7/12 9:08:01
1. 为什么Occupancy突然成了自动驾驶算法的“新十字路口”2026年5月,如果你翻看主流自动驾驶公司的技术简报、顶会论文投稿列表,甚至招聘JD里的关键词分布,“Occupancy”这个词出现的频率已经压过了“BEV”“Transformer”“端到端”这些老面…
📅 2026/7/12 9:08:01
说实话,刚听说伏羲openclaw的时候,我是真没当回事。网上吹得神乎其神,什么AI革命,什么颠覆行业。我心想,又是割韭菜的吧?毕竟这年头,换个马甲收钱的套路太多了。但我这人有个毛病,不信邪。身边好几个做电商的朋友,偷偷用了之后,业绩翻倍。他们不说,我也好奇。于是,…
📅 2026/7/12 9:06:55
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/12 0:15:59
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/10 22:46:54
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/12 8:07:36