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只能在堆上使用

原文地址:https://www.cnblogs.com/logchen/p/10203969.html

时间: 2024-08-27 10:13:43

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

java基础算法--排序大全

1 package sorting; 2 3 import java.util.*; 4 //import java.util.Comparator; 5 //import java.util.PriorityQueue; 6 //import java.util.Queue; 7 8 public class Sorting { 9 /************************************序言******************************************

基础算法——排序【一】

排序可以说时最基础的算法之一,排序就是将数据按照某种逻辑重新排列的过程,比如从大到小排序.从小到大排序:排序非常常见比如有购物车物品的排序.历史订单的排序等等:算法我们比较关心的主要有两点:时间复杂度与空间复杂度,排序算法一样:这篇文章只介绍几种基本的排序算法:冒泡排序.插入排序.选择排序: 选择排序 算法逻辑上分为已排序未排序两个区间,从当前列表中选择最小的元素与当前列表第一个元素交换位置,从列表剩余元素中找到最小元素与列表第二个元素交换位置如此重复执行的算法为选择排序算法: 选择排序与数据的

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

不修改数据的算法 count, min and max, compare, linear search, attribute // 算法中Lambda函数很常用: num = count_if(vec.begin(), vec.end(), [](int x){return x<10;}); bool lessThan10(int x) { return x<10; } vector<int> vec = {9,60,90,8,45,87,90,69,69,55,7}; vecto

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

修改元素的算法 copy, move, transform, swap, fill, replace, remove vector<int> vec = {9,60,70,8,45,87,90}; // 7 items vector<int> vec2 = {0,0,0,0,0,0,0,0,0,0,0}; // 11 items vector<int>::iterator itr, itr2; pair<vector<int>::iterator, v

STL查找、排序、替换、集合算法

1.STL查找算法 (1).代码如下: #include<iostream> #include<vector> #include<algorithm> using namespace std; //查找算法!!! void main_adjacent_find(){     vector<int> v1;      v1.push_back(1);     v1.push_back(2);     v1.push_back(2);     v1.push_b

基础算法之排序--快速排序

1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

java基础算法之排序

总体基础算法总结 http://blog.csdn.net/lilong_dream/article/details/23356513 基础算法之排序 http://www.cnblogs.com/qqzy168/archive/2013/08/03/3219201.html 基础算法之数组.字符串 String l="helloworld";toCharArray 将字符串转化成数组char[] a1=l.toCharArray(); toCharArray()  //获得字符串对应

算法基础之排序(2)--选择排序 改进

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性

算法基础之排序(1)--冒泡排序 改进

1 /********************************************************************************************************** 2 * Function : test 3 * Create Date : 2014/03/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性