STL中排序算法

[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:上一排列组合,对区间元素进行一次组合排列,使之字典顺序减小。

时间: 2024-11-07 21:07:26

STL中排序算法的相关文章

STL中排序算法的选择

 当大多数程序员需要对一组对象进行排序的时候,首先想到的一个算法是sort.sort是一个非常不错的算法,但它也并非在任何场合下都是完美无缺的.有时候我们并不需要一个完全的排序操作.比如说,如果我们有一个存放Widget的矢量,而我们希望将质量最好的20个Widget送给最重要的顾客,按照顾客的重要程度送上不同质量的Widget,那么只需要排序出前20个最好的Widget,其他的Widget可以不用排序.在这种情况下,需要的是一种部分排序的功能,而有一个名为partial_sort的算法正好

STL中的算法小结

(1)要运用STL的算法,首先必须包含头文件<algorithm>,某些STL算法用于数值处理,因此被定义于头文件<numeric> (2)所有STL算法都被设计用来处理一个或多个迭代器区间,第一个区间通常以起点和终点表示,至于其他区间,多数情况下你只需提供起点便足以,其终点可以自动以第一个区间的元素数量推断出来,调用者必须保证这些区间的有效性. STL算法采用覆盖模式而非安插模式,所以调用者必须保证目标区间拥有足够的元素空间,当然你也可以运用特殊的安插型迭代器将覆盖模式改变为安插

java中排序算法

Java中排序可以分为内部排序,外部排序具体如下: 这里我们讨论选择排序.冒泡排序.快速排序 选择排序 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止. 操作方法: 第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换: 第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换: 以此类推..... 第i

STL中heap算法(堆算法)

 ①push_heap算法 以下是push_heap算法的实现细节.该函数接收两个迭代器,用来表现一个heap底部容器(vector)的头尾,而且新元素已经插入究竟部的最尾端. template <class RandomAccessIterator> inline void push_heap(RandomAccessIterator first,RandomAccessIterator last) { //注意,此函数被调用时,新元素应已置于底部容器的最尾端 _push_heap_au

C++ STL之排序算法

排序算法和查找算法差不多,也涉及到迭代器区间问题,关于该问题的注意事项就不在啰嗦了 一.全部排序sort.stable_sort sort是一种不稳定排序,使用时需要包含头文件algorithm 默认可以传两个参数或三个参数.第一个参数是要排序的区间首地址,第二个参数是区间尾地址的下一地址.如果只传入这两个地址的话,就按照升序对指定地址区间排序.想要按照降序排列的话,需要传入第三个函数,第三个函数可以自己写cmp,也可以直接调用库函数 greater<data-type>(),使用库函数的时候

STL常用排序算法介绍

merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个序列. #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; void printV(vector<int> &v) { for (vector<int>::iterator it = v

(四)STL中的算法

参考:<STL源码剖析>第6章 算法 #include <iostream> #include <vector> #include <functional> /*********************************************************************/ template<class InputIterator, class T> T accumulate(InputIterator first, I

STL中简单算法实例sort()、next_permutation()

#include<iostream> #include<string> #include<algorithm> using namespace std; int main() {     string letters;     cout<<"Enter the letters grouping (quit to quit): ";     while(cin>>letters && letters != &qu

STL源代码分析——STL算法sort排序算法

前言 因为在前文的<STL算法剖析>中,源代码剖析许多,不方便学习,也不方便以后复习.这里把这些算法进行归类,对他们单独的源代码剖析进行解说.本文介绍的STL算法中的sort排序算法,SGI STL中的排序算法不是简单的高速排序,而是交叉利用各种排序:堆排序.插入排序和高速排序:这样做的目的是提高效率.针对数据量比較大的採用高速排序,数据量比較小的能够採用堆排序或插入排序. 本文介绍了有关排序的算法random_shuffle.partition.stable_partition.sort.s