我不是大佬,只是个蒟蒻。
但我知道sort咋打。
sort是快排没错。
用法:
```cpp
#include <bits/stdc++.h>
using namespace std;
int a[10001];
int main() {
int n;
cin>>n;
for (register int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for (register int i=1;i<=n;i++)
cout<<a[i]<<' ';
}
```
by Ice_watermelon @ 2018-03-15 22:59:50
还支持自己写的结构体:
```cpp
#include<iostream>
#include<algorithm>
#include<cstdio>
#define MAXN 100010//此程序包含的某种黑科技
using namespace std;
int n;
struct point{
int x,y;
}a[MAXN];
inline int read(){//此程序包含的某种黑科技
int date=0,w=1;char c=0;
while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
return date*w;
}
bool cmp(const point &p,const point &q){
if(p.x==q.x)return p.y<q.y;
return p.x<q.x;
}
int main(){
n=read();
for(int i=1;i<=n;i++){
a[i].x=read();a[i].y=read();
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)printf("%d %d\n",a[i].x,a[i].y);
return 0;
}
```
by 斯德哥尔摩 @ 2018-03-15 23:19:52
@[蒟蒻chi_chi](/space/show?uid=31728)
首先对 @[Ice_watermelon](/space/show?uid=90553) 的回复纠正一下。std::sort 不仅仅是快排,它比快排快。以下是我在知乎摘录的内容:
> std::sort 拥有更小的渐进复杂度系数。
> 首先,STL 的 sort 不仅仅是快排,所以你只是手写快排,哪怕是尾递归式的快排,也不会有它快。它会先走快排主递归逻辑,但是递归深度是有限的,而且当子区间够小时,会走插入排序。
[链接](https://www.zhihu.com/question/24189847/answer/130319417)
by Anguei @ 2018-03-15 23:20:31
sort支持自己的比较函数
如果不填的话是默认从小到大
当然结构体是必填
格式如下:
sort(a+1,a+n+1,cmp);
其中a是数组名,+1表示从第一位排到第n位
cmp是比较函数
上面大佬们都说过了
by 斗神·君莫笑 @ 2018-03-15 23:24:11
@[蒟蒻chi_chi](/space/show?uid=31728) 再对题主的问题进行一下解答。
-----
Q: 要开哪个头文件?
A: `#include <algorithm>`
-----
Q: 如果要用的话 sort() 括号里写什么?
A: std::sort() 对一个**左闭右开**区间进行排序,默认升序。在旧标准中,需要填写两到三个参数。分别是区间头、区间尾、比较器(排序规则)。其中,前两个参数都是指针,第三个参数是一个函数对象。
如果对数组排序,可以填写数组名,因为数组名被隐式转化为指针。例子:
```cpp
int a[100];
// 省略掉赋值 / 读入操作
std::sort(a + 1, // 数组名被隐式转化为数组首元素地址
a + n + 1 // 要排序到第 n 个元素
);
```
以上代码对 \[1, n\] 进行排序。如果对 \[0, n\) 排序,请去掉「+1」
如果对 std::vector 排序,请填写 `vec.begin() ` 和 `vec.end()`。
by Anguei @ 2018-03-15 23:53:20
@[蒟蒻chi_chi](/space/show?uid=31728) http://zh.cppreference.com/w/cpp/algorithm/sort
by Anguei @ 2018-03-15 23:55:34
yyf大佬还真是很热心呢@[yyfcpp](/space/show?uid=53062)
by 小闸蟹 @ 2018-03-16 08:28:06
@[yyfcpp](/space/show?uid=53062) 谢谢!
by si_zhong @ 2018-03-18 14:24:10
@[yyfcpp](/space/show?uid=53062) 谢谢dalao补充哦!
by Ice_watermelon @ 2018-03-24 09:46:28