概述
STL中提供了一个sort()函数,用于排序。它的实现虽然是基于我们熟悉的quick sort, insertion sort, heap sort,但是内部却庞大复杂。sort()函数只能接受RandomAccessIterators,list slist都不能使用。
STL中的sort()函数在数据量大的时候采用quick sort,分段后的数据量小于某一个门槛时便采用insertion sort。
Insertion Sort
之所以采用insertion sort,是因为当划分的数据量小于某一个门槛或者待排序的序列接近有序的时候,insertion sort虽然时间复杂度是O(n^2),但是仍然比quick sort好。
void __insertion_sort(RAIterator first, RASIterator last){
if(first == last) return;
for(RAIterator i = first + 1; i != last; ++i)
__linear_insert(first, i, value_type(first));
}
inline void __linear_insert(RAIterator first, RA