STL基础--算法(排序)
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基础--算法(排序)的更多相关文章
- STL基础--算法(已排序数据的算法,数值算法)
已排序数据的算法 Binary search, merge, set operations 每个已排序数据算法都有一个同名的更一般的形式 vector vec = {8,9,9,9,45,87,90} ...
- STL基础--算法(修改数据的算法)
修改元素的算法 copy, move, transform, swap, fill, replace, remove vector<int> vec = {9,60,70,8,45,87, ...
- STL基础--算法(不修改数据的算法)
不修改数据的算法 count, min and max, compare, linear search, attribute // 算法中Lambda函数很常用: num = count_if(vec ...
- STL学习笔记--排序算法
排序算法 C++ STL 的排序算法(Sorting algorithms)是一组将无序序列排列成有序序列的模板函数或与排序相关的模板函数,提供了排序.折半搜索.归并.集合操作.堆操作.最值求解.字典 ...
- STL中的排序算法
本文转自:STL中的排序算法 1. 所有STL sort算法函数的名字列表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 ...
- 算法与数据结构基础 - 拓扑排序(Topological Sort)
拓扑排序基础 拓扑排序用于解决有向无环图(DAG,Directed Acyclic Graph)按依赖关系排线性序列问题,直白地说解决这样的问题:有一组数据,其中一些数据依赖其他,问能否按依赖关系排序 ...
- 算法基础~链表~排序链表的合并(k条)
算法基础~链表~排序链表的合并(k条) 1,题意:已知k个已排序链表头结点指针,将这k个链表合并,合并后仍然为有序的,返回合并后的头结点. 2,方法之间时间复杂度的比较: 方法1(借助工具vector ...
- python基础===八大排序算法的 Python 实现
本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...
- STL之vetor 排序
1 STL提供的Sort 算法 C++之所以得到这么多人的喜欢,是因为它既具有面向对象的概念,又保持了C语言高效的特点.STL 排序算法同样需要保持高效.因此,对于不同的需求,STL提供的不同的函数, ...
随机推荐
- TFLearn 与 Tensorflow 一起使用
好用的不是一点点..=-=.. import tensorflow as tf import tflearn import tflearn.datasets.mnist as mnist # Usin ...
- Windows 下使用nginx命令启动
http://wanganwu.blog.163.com/blog/static/7788722012322111417966/ Windows下Nginx的启动.停止等命令 在Windows下使用N ...
- SyntaxError: Non-UTF-8 code starting with '\xe5' in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for
用charles抓包时, 对抓到的html,放到pycharm中解析, 结果报错: SyntaxError: Non-UTF-8 code starting with '\xe5' in file * ...
- textarea(多行文本域)
多行文本域<textarea>: <textarea name="..." rows="..." cols="..." . ...
- 为移动端而设计的bootstrap的使用
一.下载 --bs ---css ----bootstrap.css ----bootstrap.min.css ---fonts ---js ----bootstrap.js ----jquery. ...
- 20165313 《Java程序设计》第七周学习总结
教材学习总结 1.下载安装MySQL数据库管理系统. 2.MySQL数据库基本操作. 3.利用JAVA程序对MySQL数据库系统进行查找,更新,添加和删除操作. 学习中的问题与解决方案 1.运行书上安 ...
- mysql 开启binlog
登录mysql之后使用下面的命令查看是否开启binlog show variables like 'log_%'; if没有开启则在mysql的配置文件中 加入以下内容 server_id=2 log ...
- 【liunx】linux后台执行命令:&和nohup
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件.对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨).为 ...
- namespace关键字学习笔记
一.namespace简介 namespace中文意思是命名空间或者叫名字空间,传统的C++只有一个全局的namespace,但是由于现在的程序的规模越来越大,程序的分工越来越细,全局作用域变得越来越 ...
- MySQL--线程池(Thread Pool)
================================================================= 线程池技术 在MySQL社区版中,MySQL使用one-thread ...