zoukankan      html  css  js  c++  java
  • 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只能在堆上使用
    
  • 相关阅读:
    Hanoi塔
    采药
    进制转换(大数)
    Load Balancing with NGINX 负载均衡算法
    upstream模块实现反向代理的功能
    epoll
    在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树
    粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers
    负载均衡 4层协议 7层协议
    A Secure Cookie Protocol 安全cookie协议 配置服务器Cookie
  • 原文地址:https://www.cnblogs.com/logchen/p/10203969.html
Copyright © 2011-2022 走看看