• 概念
STL sort有SGI和RW两个版本,两者大同小异,本文讲解的是SGI版本,RW感兴趣自行了解。
头文件:#include<algorithm>
STL 所提供的各种算法中,sort()是最复杂、最庞大的一个。这个算法接受两个随机存取迭
代器(Random Access Iterators),然后将区间内的所有元素从小到大排序。
这个算法有两个重载:
① 直接传入两个随机存取迭代器即可;
② 允许用户指定一个比较器(可以是仿函数、结构体、lambda表
达式、函数指针),使得自定义类型也可以用sort()。
• 适用场景
Sort() 第一个重载只适用于STL中的 vector、deque
由于 STL 所有的关系型容器的底层结构是RB-tree,都拥有自动排序的功能。所以不需要sort()。
至于序列式容器中的stack,queue都有特别的出口和入口,不允许用户对元素进行随意移动。
而vector、deque和list,因为list的迭代器属于双向移动迭器(Bidirectioinal Iterator),slist的迭代器属于单向移动迭代器(Forward iterator),所以都不适用sort()算法。
vector、deque的迭代器属于Random Access Iterator,适用sort算法。
• 底层思想
sort算法大致思想为,在数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量
小于某个门槛,为了避免Quick Sort递归的层数过多,就改用Insertion Sort。如果递归层数过深,
还会改用Heap Sort。
Insertion Sort算法的时间复杂度虽然为O(N^2),但是当数据量很少时