【C++ STL】sort() 数组片段排序

题目

现在有N个数,先将数组中的第 l_{1} 到第 r_{1} 的数字按从小到大的顺序排序。再将数组中第 l_{2} 到第 r_{2} 的数字按从大到小的顺序排序。

输入格式

第一行输入 5 个整数 Nl_{1}r_{1}l_{2}r_{2},其中 0 < l_{1} < r_{1} <N, 0 < l_{2} < l_{2} <N,这五个数不超过10000;

第二行为 N 个整数。

输出格式

一行N个整数,表示数组排序后的结果,数字之间用空格隔开,末尾换行。

代码

#include<bits/stdc++.h>
using namespace std;
int arr[10010];
bool judge_1(int a, int b){
    return a > b;
}
int main(){
    int N, l1, r1, l2, r2;
    cin >> N >> l1 >> r1 >> l2 >> r2;
    for(int i = 0; i < N; i++){
        cin >> arr[i];
    }
    sort(arr + l1 - 1, arr + r1);
    sort(arr + l2 - 1, arr + r2, judge_1);
    for(int i = 0; i < N; i++){
        cout << arr[i];
        if(i != N - 1)
            cout << " ";
    }
    return 0;
}

这题目有一个比较小的易错点,使用 sort() 排序,我们要注意一下函数的参数:

  • 第一个是要排序的数组的起始地址。
  • 第二个是结束的地址(最后一位要排序的地址)
  • 第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

因此这里,第K个数的起始地址为 arr + K - 1

发布了62 篇原创文章 · 获赞 34 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41960890/article/details/105186981