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只能在堆上使用
    
  • 相关阅读:
    CentOS下安装Git
    MongoDB 从入门到精通专题教程
    mongodb分布式集群架构
    CentOS6.2 下安装中文语言包
    英语流利说 第18天
    英语流利说 第17天
    英语流利说 第16天
    英语流利说 第15天
    英语流利说 第14天
    英语流利说 第13天
  • 原文地址:https://www.cnblogs.com/logchen/p/10203969.html
Copyright © 2011-2022 走看看