关于c++:C中STL中sort算法使用了什么排序算法

31次阅读

共计 647 个字符,预计需要花费 2 分钟才能阅读完成。

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 算法是快排、插入排序和堆排序的综合。

正文完
 0