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

相關文章
相關標籤/搜索