
快速排序
std::sort可直接对vector快速排序,需传入合法迭代器范围和比较逻辑;默认升序、不稳定、原地排序,支持greater、lambda及自定义比较函数,须满足严格弱序。
零成本抽象指高级抽象不比手写底层代码多花代价;其核心是编译期模板实例化与内联消除运行时开销,但误用虚函数、函数指针、未优化或定义不可见会破坏该特性。
快速排序核心是分治:选基准将数组分为小于、等于、大于三部分,再递归处理前后两部分;C++实现需注意边界控制、原地排序、三路优化及基准随机化等细节。
std::partition用于原地二路分割,将满足谓词的元素移至前段、不满足的移至后段,不保证各自内部顺序,返回分割点迭代器;适用于vector等支持前向迭代器的容器,但list需用成员函数part...
TOPN排序用堆实现截断,时间复杂度O(logN),可借索引提前终止;全排序需全局有序,小数据用快排/归并,大数据用外部归并,强调稳定性与I/O优化。
std::sort不是手写快排的替代,因其采用introsort混合实现且不暴露分区逻辑;手写快排适用于理解本质、调试边界或禁用STL场景;partition函数需确保左右指针不越界,常见错误是l
B-树核心是磁盘I/O优化,通过减少树高、节点多关键字、同层叶子实现高效读取;C++实现需体现分裂/合并、自底向上调整、键值有序三大本质特征。
快速排序核心是分治:选基准将数组分为小于、等于、大于三部分,递归处理左右;需避免最坏O(n²),推荐随机选或三数取中选基准,并用Lomuto/Hoare双指针原地分区。
PHP算法面试题主要分四类:排序(快排、冒泡、插入、选择)、查找(二分、顺序及变体)、递归分治(斐波那契、阶乘、数组扁平化)、数组字符串操作(去重、排序、反转、合并等),覆盖九成以上面试场景。
快速排序基于分治思想,通过基准元素划分数组并递归或迭代排序子区间;C++中可递归实现(简洁直观)或非递归用栈模拟(避免栈溢出),核心为partition函数;实际推荐使用std::sort。