STL排序算法

  • 排序算法要求随机访问迭代器

vector, deque, container array, native array

  • 例子
vector<int> vec = {9,1,10,2,45,3,90,4,9,5,8};

sort(vec.begin(), vec.end());  // 默认以 < 排序
// vec: 1 2 3 4 5 8 9 9 10 45 90 bool lsb_less(int x, int y) {
return (x%10)<(y%10);
}
sort(vec.begin(), vec.end(), lsb_less); //自定义比较函数lsb_less()
// vec: 10 90 1 2 3 4 45 5 8 9 9
  • 部分排序
// 找出分数前五的学生
vector<int> vec = {9,60,70,8,45,87,90,69,69,55,7}; partial_sort(vec.begin(), vec.begin()+5, vec.end(), greater<int>());
// vec: 90 87 70 69 69 8 9 45 60 55 7 partial_sort(vec.begin(), vec.begin()+5, vec.end()); //默认 <
// vec: 7 8 9 45 55 90 60 87 70 69 69
  • 前几个(不要求排序)
vector<int> vec = {9,60,70,8,45,87,90,69,69,55,7};

nth_element(vec.begin(), vec.begin()+5, vec.end(), greater<int>());
// vec: 69 87 70 90 69 60 55 45 9 8 7
  • 分成两部分
// 满足条件的在前,不满足的在后
vector<int> vec = {9,60,70,8,45,87,90,69,69,55,7}; bool lessThan10(int i) {
return (i<10);
}
partition(vec.begin(), vec.end(), lessThan10);
// vec: 8 7 9 90 69 60 55 45 70 87 69 // 每个部分保持之前的顺序
stable_partition(vec.begin(), vec.end(), lessThan10);
// vec: 9 8 7 60 70 45 87 90 69 69 55
  • 堆排序算法
// 堆:
// 1. 第一个元素总是最大的
// 2. 插入/删除时间 O(log(n)) vector<int> vec = {9,1,10,2,45,3,90,4,9,5,8}; make_heap(vec.begin(), vec.end());
// vec: 90 45 10 9 8 3 9 4 2 5 1 // 删除最大元素:
pop_heap(vec.begin(), vec.end()); // 1. 交换vec[0]和最后一个元素vec[size-1]
// 2. 重新对[vec.begin(), vec.end()-1)进行生成堆
// vec: 45 9 10 4 8 3 9 1 2 5 90
vec.pop_back(); // 删除最后一个元素
// vec: 45 9 10 4 8 3 9 1 2 5 // 增加一个新元素:
vec.push_back(100);
push_heap(vec.begin(), vec.end()); // vec最后一个元素,重新生成堆
// vec: 100 45 10 4 9 3 9 1 2 5 8 // 堆排序:
vector<int> vec = {9,1,10,2,45,3,90,4,9,5,8};
make_heap(vec.begin(), vec.end()); sort_heap(vec.begin(), vec.end());
// vec: 1 2 3 4 5 8 9 9 10 45 100
// 注: sort_heap只能在堆上使用

STL基础--算法(排序)的更多相关文章

  1. STL基础--算法(已排序数据的算法,数值算法)

    已排序数据的算法 Binary search, merge, set operations 每个已排序数据算法都有一个同名的更一般的形式 vector vec = {8,9,9,9,45,87,90} ...

  2. STL基础--算法(修改数据的算法)

    修改元素的算法 copy, move, transform, swap, fill, replace, remove vector<int> vec = {9,60,70,8,45,87, ...

  3. STL基础--算法(不修改数据的算法)

    不修改数据的算法 count, min and max, compare, linear search, attribute // 算法中Lambda函数很常用: num = count_if(vec ...

  4. STL学习笔记--排序算法

    排序算法 C++ STL 的排序算法(Sorting algorithms)是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序.折半搜索.归并.集合操作.堆操作.最值求解.字典 ...

  5. STL中的排序算法

    本文转自:STL中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名    功能描述 sort   对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 ...

  6. 算法与数据结构基础 - 拓扑排序(Topological Sort)

    拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...

  7. 算法基础~链表~排序链表的合并(k条)

    算法基础~链表~排序链表的合并(k条) 1,题意:已知k个已排序链表头结点指针,将这k个链表合并,合并后仍然为有序的,返回合并后的头结点. 2,方法之间时间复杂度的比较: 方法1(借助工具vector ...

  8. python基础===八大排序算法的 Python 实现

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

  9. STL之vetor 排序

    1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...

随机推荐

  1. I2C总线以及GPIO模拟I2C

    ·I2C总线的一些特征: 1. 只要求两条总线,一条串行数据线(SDA),一条串行时钟线(SCL) 2. 两个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机系统软件设定的地址:主机可 ...

  2. angular的点击添加

    首先是在js里面我们可以用clone来点击添加一些东西比如列表或者其他的div之类的,但是在angular里面怎么实现点击添加呢? 类似这种: 这样就尴尬了,最少我这样的菜鸟是不知道怎么去写的,网上好 ...

  3. jQ常用选择器

    #id:    $('#div'); //查找id='div'; .class: $('.myclass'); //查找class='myclass';​ element:用于搜索的元素,指向DOM节 ...

  4. manjaro初体验

    manjaro Linux是https://distrowatch.com/网站上排名第一的Linux分支. https://manjaro.org/ 选择,下载,打开主页下载页:https://ma ...

  5. LG2634 [国家集训队]聪聪可可

    题意 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是 ...

  6. mongodb千万级写入怎么优化

    从mysql数据库通过java程序导入单表1300w到mongodb,花了大概50分钟,前1000w条数据中每100w条大概要3分钟,之后的300多w条就差不多每100w条要5到6分钟,之后再从其他的 ...

  7. MySQL Profiling--常用命令

    ##=====================================## ## 查看PROFILING是否开启 SELECT @@profiling ## 开始会话级别PROFILING # ...

  8. lua-resty-qless-web UI 界面运行

    lua-resty-qless-web 是 lua-resty-qless 的web 管理界面以及lua-resty-template 模版引擎开发的,里面实现了一个简单的 路由功能 备注: demo ...

  9. gravitee.io gateway 组件说明

    gateway 在gravitee.io是一个比较核心的组件,我们可以应用规则到请求链中(包含request,response,类似 的skipper的路由功能(可以通过pipeline的模型,在re ...

  10. 【转载】Win10系统怎么清空剪切板?Win10系统清空剪切板的方法

    以下文转载至系统之家: 网址:http://www.xitongzhijia.net/xtjc/20190319/152585.html Win10系统怎么清空剪切板?Win10系统清空剪切板的方法 ...