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()、greater())在 C++ 中是自带的,如果要从大到小排序,就可以直接将第三个参数替换为 greater()。

在排序时,可以通过以上所述的比较函数、重载运算符或者其他方式进行自定义比较,但是在比较方式不明确的情况下就无法排序,导致编译失败。故在排序时需要确认比较方式明确。

posted @ 2026-05-26 00:08  Enzo_Kevin  阅读(7)  评论(0)    收藏  举报