news 2026/10/16 9:29:31

095快速排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
095快速排序

快速排序 - 实践中最快的排序算法

095快速排序:征服世界的算法

📰 5W1H 发明者故事

Who(何人)- 发明者是谁?

发明者:查尔斯·安东尼·理查德·霍尔(Charles Antony Richard Hoare,简称 Tony Hoare)
背景:霍尔(1934-),英国计算机科学家,牛津大学教授,图灵奖得主(1980年)。他21岁就读俄语,22岁服役,26岁发明快速排序。他还发明了 Hoare逻辑(用于程序正确性证明)和CSP(通信顺序进程),是形式化方法的先驱。他晚年还因对自己的错误决策"空指针"而道歉(C.A.R. Hoare: null reference is “my billion-dollar mistake”)。

当时的处境:1959年,霍尔在莫斯科国立大学留学,学习俄语和机器翻译技术。他的导师给他一个任务:为机器翻译程序实现一个对俄语词典单词排序的功能。当时他正在学习谢尔排序(Shell Sort),但发现可以做得更好。在一个晚上,他想出了快速排序的核心思想:选一个"枢轴",把小的放左边,大的放右边,递归处理。他在回到英国后,用Autocode编程语言实现了它。

When(何时)- 什么时候发明的?

时间:1959年(霍尔在莫斯科期间构思),1960年首次发表
时代背景:

  • 第一代高级语言(FORTRAN, ALGOL, COBOL)刚刚问世
  • 排序是计算机应用中最耗时的操作,IBM的机器50%时间都在排序
  • 谢尔排序(1959年)刚刚提出,是当时最好的排序之一
  • 归并排序(冯·诺依曼,1945年)是理论上的最优,但需要额外空间

Where(何地)- 在哪里发明的?

地点:苏联莫斯科国立大学(构思),英国椭圆计算机公司(实现)
环境:1959年冷战高峰期,霍尔作为英国交换生在莫斯科学习。他晚上在宿舍里苦思冥想排序问题,没有计算机,只有纸和铅笔。他后来说:那个顿悟的夜晚,他完全用脑力"执行"了算法,验证了它的正确性。

What(何事)- 发明了什么?

算法:快速排序(Quicksort)
核心思想:分而治之(Divide and Conquer)

  1. 选枢轴(Pivot):从数组中选一个元素作为基准
  2. 分区(Partition):将数组重排,使所有 ≤ pivot 的元素在左,≥ pivot 的在右
  3. 递归:对左右两部分分别递归执行快速排序

关键突破:

  • 原地排序(只需O(log n)栈空间)
  • 平均 O(n log n),实践中常数因子比归并排序小
  • 高效利用缓存(局部访问模式)

Why(何因)- 为什么发明?

动机:霍尔学谢尔排序时,觉得它的间距策略复杂难懂。他想:有没有更自然、更快的方法?
问题:冒泡排序和插入排序都是O(n²),不够快。归并排序需要O(n)额外空间。
洞察:如果能找到一个元素的"最终位置",就可以把问题分成两个独立的子问题。

How(何果)- 如何实现?有什么影响?

历史影响:

  • 被克努斯评价为"20世纪最重要的算法之一"
  • C标准库qsort()就是快速排序(或其变体)
  • 实践中比理论上更快的O(n log n)算法(如归并排序)更快的原因:更好的缓存局部性
  • 内省排序(Introsort):快速排序 + 堆排序的混合,是 C++ STLstd::sort的实现

📝 自然语言需求定义

需求名称:实现带优化的快速排序,包含三数取中选pivot、小数组切换插入排序、三路分区

功能需求

  1. 基本快速排序:Lomuto分区,递归实现
  2. 优化快速排序:三数取中 + 小数组(n<8)用插入排序
  3. 三路快速排序:处理大量重复元素(将数组分为<pivot、==pivot、>pivot三段)

验收标准

编号测试场景预期结果验证方式
1基本排序 [5,2,4,6,1,3][1,2,3,4,5,6]逐元素比较
2逆序数组正确排序is_sorted检验
3已排序数组不变逐元素比较
4含重复元素正确排序is_sorted检验
5三路快排处理全相同元素正确,无无效交换is_sorted检验
6单元素数组不变边界条件
71000个随机数正确排序is_sorted检验

💻 C语言实现文件

对应文件:quicksort.c

编译运行:

gcc-oquicksort_test quicksort.c ./quicksort_test

核心函数:

  • quicksort(arr, low, high)- 带优化的快速排序
  • quicksort3(arr, low, high)- 三路快速排序
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/16 9:27:48

BrowserSkill:基于CDP的浏览器CLI自动化工具

1. BrowserSkill不是浏览器&#xff0c;而是让浏览器“听懂人话”的CLI能力层你第一次看到“BrowserSkill”这个词&#xff0c;大概率会下意识以为它是个新出的浏览器——毕竟后面跟着Chrome、Edge这些关键词&#xff0c;热搜里还混着“chrome下载”“edge浏览器内存占用”这类…

作者头像 李华
网站建设 2026/10/16 9:26:46

2026年度创新药GEO优化企业推荐:国内头部药企GEO服务商推荐

当AI问答成为药企新的流量入口&#xff0c;GEO优化正在重塑医药营销格局从搜索到问答&#xff1a;医药营销的底层逻辑正在改变过去&#xff0c;患者和医生获取用药信息的路径很清晰&#xff1a;打开搜索引擎&#xff0c;输入关键词&#xff0c;浏览网页结果。但今天&#xff0c…

作者头像 李华
网站建设 2026/10/16 9:25:46

轻量级PyTorch验证码OCR模型:高鲁棒端到端识别

简介&#xff1a;本资源是一套面向Python开发者与信息安全从业者的高精度验证码OCR识别解决方案&#xff0c;聚焦网站登录、爬虫绕过、自动化测试等实际场景中的图像验证码破解需求。项目基于PaddleOCR深度学习框架构建&#xff0c;集成预处理、字符识别与后处理全流程&#xf…

作者头像 李华
网站建设 2026/10/16 9:25:24

Halcon 分类(Classification)详解与算子说明

Halcon 分类(Classification)详解与算子说明 参考来源:Halcon 17.12 Operator Reference — Classification 章节、Solution Guide II-D (Classification) 适用版本:Halcon 17.12(主基准)/ 20.11 / 22.11 / 24.05 官方示例路径:Applications/Classification/ 下的 class…

作者头像 李华
网站建设 2026/10/16 9:24:17

Windows Server 2012 R2 SXS文件详解:.NET Framework 3.5离线安装核心资源

简介&#xff1a;本资源是专为 Windows Server 2012 R2 Standard 系统设计的 .NET Framework 3.5 安装修复补丁包&#xff0c;面向系统管理员、企业 IT 运维人员及 Windows 平台部署工程师&#xff0c;解决该版本系统中因缺失 SXS 源文件导致的 .NET 3.5 启用失败、安装卡顿或报…

作者头像 李华
网站建设 2026/10/16 9:23:56

变电站四足机器狗跨层巡检机器人梯控工程实操

摘要&#xff1a; 四足机器人能够承担设备识别、环境巡视等自动巡检任务&#xff0c;但当目标点位分布在不同楼层时&#xff0c;SLAM导航无法单独完成整条路线。机器人梯控需要把建筑楼层、电梯状态与机器人任务系统连接起来&#xff0c;使巡检任务在乘梯过程中可以暂停、转换并…

作者头像 李华