2026/5/25 -P1177 【模板】排序
题面:
P1177 【模板】排序
题目描述
将读入的 \(N\) 个数从小到大排序后输出。
输入格式
第一行为一个正整数 \(N\)。
第二行包含 \(N\) 个空格隔开的正整数 \(a_i\),为你需要进行排序的数。
输出格式
将给定的 \(N\) 个数从小到大输出,数之间空格隔开。
输入输出样例 #1
输入 #1
5
4 2 4 5 1
输出 #1
1 2 4 4 5
说明/提示
对于 \(20\%\) 的数据,有 \(1 \leq N \leq 10^3\);
对于 \(100\%\) 的数据,有 \(1 \leq N \leq 10^5\),\(1 \le a_i \le 10^9\)。
观察发现疑似可以用sort直接过(bushi
虽然但是,还是写一下吧。
使用 STL sort 函数
我们可以使用 C++ algorithm 头文件中的 sort 函数来直接完成排序。其使用方法如下:
我们设我们排序的数组为 a,排序区间为 [l,r)(即所有满足 \(l≤x<r\) 的整数 \(x\)),且从小到大排序。则调用方法为:sort(a + l, a + r)。对于本题,就可以通过 sort(a + 1, a + n + 1) 自动完成排序。如果要使用这个函数,应当包含
如果想从大到小排序,或者以其他方式进行排序,那么我们就应该写一个比较函数来改变排序方法。例如我们想要把一个类型为 int 的数组从大到小排序,应这么定义这个比较函数(假设比较函数名为 cmp):
bool cmp(int a, int b){
return a > b;
}
如果是从小到大排序,就用小于号连接两数;如果是从大到小排序,就用大于号连接两数。写完这个函数,我们只需要在调用 sort 函数时在第三个参数写上函数名(例如 \(sort(a + l, a + r, cmp);\))就可以了。这种比较函数的实现方式在结构体中同样适用,只需要把比较对象修改为结构体中对应元素即可。值得一提的是,简单的比较函数(例如 less
在排序时,可以通过以上所述的比较函数、重载运算符或者其他方式进行自定义比较,但是在比较方式不明确的情况下就无法排序,导致编译失败。故在排序时需要确认比较方式明确。

浙公网安备 33010602011771号