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. php 中使用正则

    1.匹配一个由一个小写字母和一位数字组成的字符串,比如”z2″   用^[a-z][0-9]$ 2.当在一组方括号里使用^是,它表示“非”或“排除”的意思   比如要求第一个字符不能是数字:^[^0- ...

  2. Python简单介绍

    一.变量名命名规则 1).变量名要由字母数字下划线组成 2)变量名禁止以数字开头 3)变量名禁止使用Python自带关键字 4)变量名不要用中文和拼音 5)变量名大小写敏感 6)变量名推荐写法:下划线 ...

  3. random module

    import random # 方法返回随机生成的一个实数,它在[0,1)范围内print(random.random())运行结果:0.06435148447021877 # 方法返回随机生成的一个 ...

  4. 《DSP using MATLAB》Problem 6.21

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  5. springboot配置文件启动顺序

    [1]项目内部配置文件 spring boot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 1.–f ...

  6. UVA10294 Arif in Dhaka (First Love Part 2)

    题意 PDF 分析 用n颗宝石串成项链和手镯, 每颗宝石的颜色可以t种颜色中的一种,当A类项链经过旋转得B类项链时,A和B属于一类项链, 而手镯不仅可以旋转还可以翻转,当A类手镯经过翻转得得到B类手镯 ...

  7. mysql export query result

    1 . export by shell a.sql use dbname; SELECT id,iab_num FROM iab_list ; mysql -h host -uusername -P3 ...

  8. CSVN备份初体验

    备份方法挺多的,目前我知道有四种 其一: 首先复制旧csvn服务器上repositories下的版本库文件夹到新csvn服务器repositories文件夹下面(做以下修改时最好把csvn服务停掉) ...

  9. HBase Filter

    Filter CompareFilter 是高层的抽象类,下面我们将看到他的实现类和实现类代表的各种过滤条件 RowFilter,FamliyFilter,QualifierFilter,ValueF ...

  10. jupyter命令把.ipynb文件转化为.py文件

    jupyter nbconvert --to script *.ipynb 就能把当前文件夹下面的所有的.ipynb文件转化为.py文件