STL中排序算法

来源:互联网 发布:linux如何下载软件包 编辑:程序博客网 时间:2024/05/14 16:52

[1]    push_heap:默认为大根堆,主要是上滤操作。

[2]    make_heap:创建堆,默认构建大根堆。他的实现基于这样一个简单的想法:将二叉树中的每个仅二层的子树都构成堆,那么整个数据集的布局几乎即可以满足堆的定义。

[3]    pop_heap:将已构成堆的迭代器区间中最大值元素移到区间的最后元素位置。原来的最后元素调整为根结点元素后,再对除最后一个元素之外的区间调整。

[4]    sort_heap:堆排序,时间复杂度O(nlog2n)。内部通过一个while循环调用pop_heap函数实现。

[5]    is_heap:是否为堆。

[6]    partial_sort:局部排序,内部使用堆排序来实现,因此时间复杂度O(nlog2n)。原型void partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIteratorlast);排序结果中只有[first,middle)中的元素被排序。

[7]    partial_sort_copy:局部排序复制,与partial_sort的不同在于将排序结果放到了制定位置。

[8]    sort:时间复杂度最坏情况下意识O(nlog2n),内部实现为对快排的一种改进。较早起的快排,即标准C++的qsort函数所使用的排序算法更好,平均时间复杂度为O(nlog2n)。

[9]    merge:归并,将两个具有相同升降方向的有序序列合并成一个有序序列。

[10] inplace_merge:内部归并,将一个序列内部两个升降相同的子序列进行排序合并。

[11] stable_sort:稳定排序,当分配缓冲区不成功时调用inplace_stable_sort函数折半递归分割为更小的区间,当元素个数不大于15时,就直接用插入排序对小区间分别排序,然后用merge_without_buffer函数合并。

[12] is_sorted:是否有序。

[13] nth_element:仅排序第nth个元素,利用快排中的unguared_paritition函数。

[14] lower_bound:用于在有序的区间中查找首个不小于某个值得元素(折半)。

[15] upper_bound:用于在有序区间中查找首个大于某值得元素。

[16] equal_range:等价区间,用折半的方法查找第一个和最后一个可以插入某值得元素,这些元素可以构成所谓的等价区间。实现:内部一个while循环用折半方法分析出可以插入的元素在左区间还是右区间,最后用lower_bound和upper_bound返回第一个和最后一个可以插入的元素。

[17] binary_search:折半搜索,其中调用了lower_bound函数。

[18] include子集合:检测一个有序区间是否包含另一个有序区间。

[19] set_union:对有序的两个区间集合求并。当一个值在一个区间出现m次,另一个区间出现n次,则在并集中出现max{m, n}次。

[20] set_intersection:对有序的两个区间集合求交。当一个值在一个区间出现m次,另一个区间出现n次,则在交集中出现min{m, n}次。

[21] set_difference:求两个有序区间元素集合的差,所有属于区间1而不属于区间2的元素。当一个值在第一个区间出现m次,第二个区间出现n次,则在差集中出现max{m-n, 0}次。

[22] set_symmetric_difference:集合求异。

[23] min:最小值。

[24] max:最大值。

[25] min_element:区间中最小元素。

[26] max_element:区间中最大元素。

[27] lexicographical_compare:字典比较。

[28] next_permutation:下一排列组合,对区间元素进行一次组合排列,使之字典顺序增大。

[29] pre_permutation:上一排列组合,对区间元素进行一次组合排列,使之字典顺序减小。

0 0
原创粉丝点击