1. 程式人生 > >STL中的sort函式實現原理

STL中的sort函式實現原理

STL的sort()演算法,資料量大時採用Quick Sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免Quick Sort的遞迴呼叫帶來過大的額外開銷,就改用Insertion Sort(插入排序)。如果遞迴層次過深,還會改用Heap Sort。

STL中的sort並非只是普通的快速排序,除了對普通的快速排序進行優化,它還結合了插入排序和堆排序。根據不同的數量級別以及不同情況,能自動選用合適的排序方法。當資料量較大時採用快速排序,分段遞迴。一旦分段後的資料量小於某個閥值,為避免遞迴呼叫帶來過大的額外負荷,便會改用插入排序。而如果遞迴層次過深,有出現最壞情況的傾向,還會改用堆排序。

快速排序最關鍵的地方在於樞軸的選擇,最壞的情況發生在分割時產生了一個空的區間,這樣就完全沒有達到分割的效果。STL採用的做法稱為median-of-three,即取整個序列的首、尾、中央三個地方的元素,以其中值作為樞軸。