Sorting algorithms是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序、折半搜索、归并、集合操作、堆操作、最值求解、字典比较和排列组合等功能。
排序算法一般要求容器提供随机访问迭代器,一般适用于序列容器,如向量容器,队列容器和字符串容器等,但不适用于内部数据结构较为复杂的关联容器,如集合容器、映照容器、哈希集合容器和哈希映照容器等。
一、元素入堆push_heap
在优先队列一章中,已对堆(heap)进行了简要的介绍,现在用迭代器的形式给出更为详细的说明和分析
二、创建堆make_heap
make_heap算法重新排列元素顺序,使它们逻辑上构成一个堆
三、元素出堆pop_heap
相对于元素入堆算法push_heap,pop_heap算法将元素进行出堆操作。与push_heap一样,pop_heap必须对堆操作才有意义。
四、堆排序sort_heap
是一种利用堆进行排序的算法
五、是否为堆is_heap
并不是C++标准算法函数,而是SGI C++ STL的一个扩展算法,用于判断迭代器区间[first, last)元素是否构成一个默认的大根堆,或依照二元谓词判断comp的有序关系,是否构成一个堆
六、局部排序partial_sort
仅对部分元素进行排序,通常用来挑选最小(或最大)的若干元素。由于内部使用堆排序来实现
七、局部排序复制partial_sort_copy
本质上也是实行局部的堆排序,只是排序结果被放置到另一个区间范围中
八、排序sort
与堆排序一样,sort算法也要求使用随机访问迭代器进行排序
九、归并merge
将两个具有相同升降方向的有序序列,合并成一个有序序列
十、内部归并inplace_merge
将一个序列内部两个升降同向的子序列进行排序合并
十一、隐定排序stable_sort
也是将区间元素排序,但可保持等价元素的相对顺序稳定不变
十二、是否排序is_sorted
用于判断区间元素是否排序
十三、第n个元素nth_element
直观地说,nth_element算法仅排序第nth元素(从0开始索引)
十四、下确界lower_bound
用于在有序的区间中查找首个不小于某值的元素(大于等于某值)
十五、上确界upper_bound
查找有序区间中首个大于某值的元素(大于某值)
十六、等价区间equal_range
用折半方法查找第一个和最后一个可以插入某值的元素,这些元素构成所谓的等价区间
十七、折半搜索binary_search
在有序的区间中用折半方法搜索等于某值的元素
十八、子集合includes
用于检测一个有序区间是否包含另一个有序区间,相当于一个集合包含关系的判断
十九、集合求并set_union
对两个序列区间的元素进行集合求并
二十、集合求交set_intersection
对两个有序区间的元素进行集合求交
二十一、集合求差set_difference
求两个有序区间元素集合的差
二十二、集合求异set_symmetric_difference
对两个有序区间的元素集合A和B进行求异
二十三、最小值min
min算法返回两个元素中的较小值
二十四、最大值max
返回两个元素中的较大值
二十五、最小元素min_element
返回区间中的最小元素
二十六、最大元素max_element
返回区间中的最大元素
二十七、字典比较lexicographical_compare
按字典方式给出两个区间序列的大小比较
二十八、下一排列组合next_permutation
对区间元素进行一次组合排序,使之字典顺序大于原来的排列
二十九、上一排列组合prev_permutation
用于选择一个字典顺序更小的排列