1265 蓝桥杯 排序 简单
cpp
//C++风格解法1,sort正序排序,正、逆序分别输出,通过率100%
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int a[N];
int main(){
int n;cin >> n;
for(int i = 1; i <= n; ++i)cin >> a[i];
sort(a + 1, a + 1 + n); //快速排序平均时间复杂度O(nlogn),范围左闭右开
for(int i = 1; i <= n; ++i)cout << a[i] << " \n"[i == n];
//" \n"[i == n] i != n时输出空格,否则输出换行符
for(int i = n; i >= 1; --i)cout << a[i] << " \n"[i == 1];
// " \n"[i == 1] 判断是否为最后一个元素,是换行,否空格
return 0;
}
cpp
//C++风格解法2,lambda表达式,正序快排,逆序快排,通过率100%
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int a[N];
int main(){
int n;cin >> n;
for(int i = 1; i <= n; ++i)cin >> a[i];
sort(a + 1, a + 1 + n);
for(int i = 1; i <= n; ++i)cout << a[i] << " \n"[i == n];
sort(a + 1, a + 1 + n, [](const int &u, const int &v){return u > v;});
//sort(a + 1, a + 1 + n, cmp) lambda表达式写法
for(int i = 1; i <= n; ++i)cout << a[i] << " \n"[i == n];
return 0;
}
Lambda表达式可以嵌套使用,ISO C++14支持基于类型推断的泛型lambda表达式:
cpp
sort( a, a+n, [](const auto& a,const auto& b){return a>b;} );//降序排序:不依赖a和b的具体类型
|-----------|-----------|
| 捕捉形式:[] | 不捕获任何外部变量 |
auto:变量的自动类型推断
cpp
//C++风格解法3,自定义函数编写排序规则,通过率100%
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int a[N];
bool cmp(const int &u, const int &v){return u > v;}
//函数体写在{}里,自定义函数编写排序规则
int main(){
int n;cin >> n;
for(int i = 1; i <= n; ++i)cin >> a[i];
sort(a + 1, a + 1 + n);
for(int i = 1; i <= n; ++i)cout << a[i] << " ";
cout << "\n";
sort(a + 1, a + 1 + n,cmp);
for(int i = 1; i <= n; ++i)cout << a[i] << " \n"[i == n];
return 0;
}
reference:
八大排序算法的稳定性和事件复杂度 - tuna- - 博客园 (cnblogs.com)
c++中cout << a[i] << " \n"[i == n - 1];该怎么解释 - CSDN文库
cout <<"\n"[i == n- 1];是如何工作的?-腾讯云开发者社区-腾讯云 (tencent.com)
lambda 表达式------匿名函数 auto i= [ ] () { };_lamda表达式auto-CSDN博客
C++14 Overview, C++ FAQ (isocpp.org)
C++ auto用法及应用详解_c++ auto&-CSDN博客