基础算法及$STL$模板

2021-05-17 12:29

阅读:592

标签:优先   string   str   char   归并   oid   inline   运算符   ==   

1.优先队列

(1)大根堆(小顶堆)

priority_queue,greater >q;

(2)小根堆(大顶堆)

priority_queue, less >q;
//或者
priority_queueq;

用法

q.push(x);//入队列

q.pop();//堆顶值

q.back();//队尾值

q.pop();//出队列

q.empty();//返回q是否为空,空则返回1,否则返回0

q.size();//返回q里元素个数

2.排序

(1)快排(STL万岁!\(QwQ\))

sort(a+1,a+n+1);//a数组1~n从小到大排序

(2)结构体排序

//定义
struct node{
int x,y;
};
node a[maxn];
//先从小到大按x值排序,再从大到小按y值排序
bool cmp(node s1,node s2){
if(s1.x!=s2.x)return s1.xs2.y;
}
//主函数内
sort(a+1,a+n+1,cmp);

(3)结构体内重载运算符

struct node
{
    int x,y;
    bool operator 

(4)归并排序

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define _for(i,a,b) for(int i=a;ia[j]){
            t[p++]=a[j++];
            ans+=mid-i+1;        }
        else
        t[p++]=a[i++];
    }
    while(i>n;
    for(int i=1;i>a[i];
    gb(a,1,n);
    cout

(5)手写快排

int a[101];

void hand_write_quick_sort(int l,int r)
{
    if(l>=r) return;
    else
    {
        int i=l;
        int j=r;
        int top=a[i];
        //a[i]即为我们选择的“点”,用于分割
       //(我们用的是这个点的值,而不是位置。)
        while(i
*************************************
//l~r中第k大的数(分治)
LL get(int l, int r, int k)
{
    if (l == r) return a[k];
    int u = l + rand() % (r-l+1);
    LL v = a[u];
    swap(a[l], a[u]);

    int i = l, j = r;
    while (i = v) j--;
        if (i  i) return get(i+1, r, k);
    else return v; 
}

基础算法及$STL$模板

标签:优先   string   str   char   归并   oid   inline   运算符   ==   

原文地址:https://www.cnblogs.com/sqrthyy/p/9746508.html


评论


亲,登录后才可以留言!