STL中的sort函数

来源:互联网 发布:菜鸟网络会员干什么的 编辑:程序博客网 时间:2024/04/28 06:05

B站二面时,面试官问了一个问题,没打出来感觉挺亏的。

问题是:STL中的sort函数用的什么排序算法?这个问题我之前看面经的时候,看了一眼,但是当时没有仔细研究过。大致知道里面用了快速排序。

今天这里写一个文章总结下:

STL的sort()算法,数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个阈值,为避免Quick Sort的递归调用带来过大的额外开销,就改用Insertion Sort(插入排序)。如果递归层次过深,还会改用Heap Sort。


STL中的sort并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。


快速排序最关键的地方在于枢轴的选择,最坏的情况发生在分割时产生了一个空的区间,这样就完全没有达到分割的效果。STL采用的做法称为median-of-three,即取整个序列的首、尾、中央三个地方的元素,以其中值作为枢轴。



原创粉丝点击