C++中STL中sort算法使用了什么排序算法?

STL所提供的各式各样的算法中,sort()是最复杂庞大的一个。这个算法接受两个RandomAccessIterators(随机存取迭代器),然后将区间内的所有元素以渐增方式由小到大重新排列。第二个版本则允许用户指定一个仿函数(functor),作为排序标准。STL的所有关系型容器(associative containers)都有用自动排序功能(底层结构采用RB-tree),所以不需要用到这个sort算法。至于序列式容器(sequence containers)中的stack、queue和priority-queue都有特别的出入口,不允许用户对元素排序。剩下vector、deque和list,前两者的迭代器属于RandomAccessIterators,适合使用sort算法,list的迭代器则属于BidirectioinalIterators,不在STL标准之列的slist,其迭代器更属于ForwardIterator,都不适合使用sort算法。如果要对list或slist排序,应该使用它们自己提供的member functions sort()。
STL的sort算法, 数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负荷(overhead),就改用 Insertion Sort。如果递归层次过深,还回改用 Heap Sort。 --摘自《STL源码剖析》

即STL中的sort算法是快排、插入排序和堆排序的综合。

你可能感兴趣的:(c++,stl)