读入所有数字后调用 list.sort 原地升序排序,再按空格输出。
OJ: luogu
题目 ID: P1177
难度:普及-
标签:排序模板题python
创建: 2026-07-06 20:42
更新: 2026-10-07 10:45
题意
给出 n 个整数,把它们从小到大排序后输出。
思路
Python 列表自带排序方法:
python
numbers.sort()它会原地把列表按升序排列。数据量 n <= 10^5,直接使用内置排序即可。
历史目录中保留了 C++ 文件;本文以 Python 模板写法为准,不创建 brute.py。
Python 知识
/home/rainboy/mycode/hugo-blog/content/program_language/python/sorting_and_ordering.md:list.sort()原地排序,sorted()返回新列表。/home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:大量整数可以用sys.stdin.buffer.read().split()读取。print(*numbers)默认用空格分隔输出。
代码
python
import sys
data = list(map(int, sys.stdin.buffer.read().split()))
n = data[0]
numbers = data[1:1 + n]
numbers.sort()
print(*numbers)Pythonic 写法
sorted 快读:
python
import sys
data = list(map(int, sys.stdin.buffer.read().split()))
print(*sorted(data[1:1 + data[0]]))STL 写法
C++ 里这道题的标准写法是 vector + sort:题目只说“读入 vector<ll> 逐个 push_back 装下数据,再调 sort(v.begin(), v.end()) 从小到大排好,最后按空格输出。sort 默认按 < 比较,正好就是题目要求的升序,不用自己写比较规则。和上面的 Python 写法相比,思路完全一样(读入、调用库排序、输出),差别只在 C++ 要显式选择区间 [v.begin(), v.end()) 并自己控制输出空格。
对应的 cppbook 章节:sort:把数据按规则排序
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-07 00:19
* update_at: 2026-10-07 00:19
*/
// 这是 STL 写法:把读入的 N 个数依次放进 vector,再用 sort 排好,最后按空格输出。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
vector<ll> a; // 待排序的数列;个数由输入的 N 决定,所以用 vector 而不是定长数组
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (ll i = 0; i < n; i++) {
ll x;
cin >> x;
a.push_back(x);
}
// sort 默认按 < 排序,即从小到大;区间是左闭右开的 [a.begin(), a.end())。
sort(a.begin(), a.end());
for (ll i = 0; i < n; i++) {
if (i > 0) {
cout << ' ';
}
cout << a[i];
}
cout << '\n';
return 0;
}复杂度
Python 内置排序时间复杂度是
总结
排序模板题的 Python 写法就是读入列表、调用 sort()、输出。重点是分清 sort() 会修改原列表且返回 None。