Tech
[程序员] 面试背了八大排序,工作几年后发现大部分用不上
面试的时候八大排序倒背如流,工作几年后发现实际开发里真用得上的就那么两三个。整理一下哪些该深挖、哪些面试背完就得了。
先放结论: 实际开发 90% 的场景,直接用语言自带的排序就够了。 Java 的 Arrays.sort() 、Python 的 sorted() ,底层都是经过高度优化的( Tim Sort / 双轴快排),比你手写的任何排序都快。手写排序的意义在于理解原理和应对面试,不是让你在生产环境替代标准库。
逐个说:
快速排序 — 唯一值得深挖的
实际工程里接触最多的排序底层就是快排。Java Arrays.sort() 对基本类型用双轴快排( Dual-Pivot Quicksort ),理解快排的分区逻辑对你看懂标准库源码有帮助。
关键点不是怎么写,是 怎么选 pivot 。取第一个元素是教科书写法,实际遇到已排序数组直接退化到 O(n²)。三数中值法(左端、右端、中位数的中间值)是基本操作,更稳的是随机选 pivot 。
// 核心:分区,不是排序本身
int partition(int[] a, int low, int hig...
Read the full discussion on V2EX
This article was aggregated from V2EX. Click to join the conversation.
View on V2EX