【模板】排序

GitHub跳转原题关系图返回列表

读入所有数字后调用 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:题目只说“读入 NN 个数”,个数由输入决定,所以用 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 内置排序时间复杂度是 O(nlog⁡n)O(n\log n),空间复杂度由排序实现决定,保存输入需要 O(n)O(n)。

总结

排序模板题的 Python 写法就是读入列表、调用 sort()、输出。重点是分清 sort() 会修改原列表且返回 None。