大佬们求助!蒟蒻不懂关于sort函数的用法。

学术版

我不是大佬,只是个蒟蒻。 但我知道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


|