zoukankan      html  css  js  c++  java
  • c++ sort

    1. 单数组或者vector排序

    跟java的差不多,java的详见java数组排序,但是c++是stl ,算法跟容器分离,所以参数是迭代器,数组的话是头尾指针。

    sort(a,a+n);
    

    默认从小到大,如果要从大到小,定义一个比较函数返回bool即可:

    bool my_greater(int i,int j){
        return i>j;
    }
    sort(a, a + n, my_greater);
    

    或者用内置的greater,也可以。

    sort(a,a+5,greater<int>{});
    

    vector的话用v.begin(),v.end()来操作。
    还是挺方便的。

    2. 结构体排序

    结构体的话稍微复杂一点点。

    bool g( Chengji c1 ,Chengji c2){
        int s1 = c1.x+ c1.y+ c1.z;
        int s2 = c2.x + c2.y +c2.z;
        if(s1!=s2)return s1>s2;
    
        if(c1.x != c2.x) return c1.x>c2.x;
        return c1.id < c2.id;
    }
    // 
    sort(a,a+n,g)
    

    还一种是运算符重载,重载小于即可,因为sort 默认调用< 来进行排序。

    struct B{
        ...
           
        bool operator< (const Person& W)const
        {
            if (total != W.total) return total > W.total;
            if (chinese != W.chinese) return chinese > W.chinese;
            return id < W.id;
        }
    }
    

    典型题目是acw 429题

    3. partial_sort

    有时候你不想全部都排序,只要前k个元素是有序的,那么可以用partial_sort,比如hdu的1425这题,用partial_sort的话会比sort全排要快上200ms。
    三个参数,第二个传入k位索引即可:

    partial_sort(a,a+k, a + n, my_greater);
    

    4. 其他排序

    stable_sort 稳定排序。

  • 相关阅读:
    排序算法(I)冒泡排序
    C#常用类string
    HashMap----工作原理
    Java计算字符串中字母出现的次数
    数据库优化
    线程和进程的区别(详细)
    SpringMVC工作原理
    jsp运行原理及运行过程
    一个公告
    SR
  • 原文地址:https://www.cnblogs.com/gqdw/p/14285903.html
Copyright © 2011-2022 走看看