基础算法及$STL$模板
2021-05-17 12:29
标签:优先 string str char 归并 oid inline 运算符 == 用法 基础算法及$STL$模板 标签:优先 string str char 归并 oid inline 运算符 == 原文地址:https://www.cnblogs.com/sqrthyy/p/9746508.html1.优先队列
(1)大根堆(小顶堆)
priority_queue
(2)小根堆(大顶堆)
priority_queue
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.x
(3)结构体内重载运算符
struct node
{
int x,y;
bool operator
(4)归并排序
#include
(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;
}