sort函数
简介
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。sort函数进行排序的时间复杂度为n log2 n,比冒泡之类的排序算法效率要高,sort函数包含在头文件为#include < algorithm > 的C++标准库中。
sort函数概述
语法
sort (start, end, cmp)
参数
(1) start表示要排序数组的起始地址;
(2) end表示数组结束地址的下一位;
(3) cmp用于规定排序的方法,可不填,默认升序。
功能
sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。
一般是直接对数组进行排序,例如对数组a[10]排序,sort (a, a+10)。而sort函数的强大之处在可与cmp函数结合使用,即排序方法的选择。
为什么要用C++标准库里的排序函数?
sort函数是C++的排序方法之一,相较冒泡排序和选择排序所带来的执行效率不高的问题,sort()函数使用的排序方法是类似于快速排序的方法,时间复杂度为O(n log2 n),执行效率较高。
sort类函数总结
sort函数见下表:
函数名 | 功能描述 |
---|---|
sort | 对给定区间所有元素进行排序 |
stable_sort | 对给定区间所有元素进行稳定排序 |
partial_sort | 对给定区间所有元素部分排序 |
partial_sort_copy | 对给定区间复制并排序 |
nth_element | 找出给定区间的某个位置对应的元素 |
is_sorted | 判断一个区间是否已经排好序 |
partition | 使得符合某个条件的元素放在前面 |
stable_partition | 相对稳定的使得符合某个条件的元素放在前面 |
**
示例
注:less< int >()为升序,greater< int >()为降序
示例1 (升序)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int n, a[N];
signed main()
{
scanf ("%d", &n);
for (int i = 1; i <=n; ++i) scanf ("%d", &a[i]);
sort (a + 1, a + 1 + n, less <int> ()); //less <int> ()可以不写,因为sort排序默认为升序
for (int i = 1; i <= n; ++i) printf ("%d ", a[i]);
return 0;
}
示例1 样例输入
10
10 9 8 7 6 5 4 3 2 1
示例1 样例输出
1 2 3 4 5 6 7 8 9 10
示例2 (降序)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int n, a[N];
signed main()
{
scanf ("%d", &n);
for (int i = 1; i <=n; ++i) scanf ("%d", &a[i]);
sort (a + 1, a + 1 + n, greater <int> ());
for (int i = 1; i <= n; ++i) printf ("%d ", a[i]);
return 0;
}
示例2 样例输入
10
1 2 3 4 5 6 7 8 9 10
示例2 样例输出
10 9 8 7 6 5 4 3 2 1
下面讲一个神奇的东西
Lambda表达式(c++11新特性)
lambda表达式(匿名函数)
具体格式如下
[capture] (parameters) -> return-type {body}
capture是需要用到的外部变量, parameters是函数参数,return-type是返回的类型(可省略),body是函数体。
例:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int n, a[N];
signed main()
{
scanf ("%d", &n);
for (int i = 1; i <=n; ++i) scanf ("%d", &a[i]);
sort (a + 1, a + 1 + n, [] (int a, int b) { return a < b; }));
for (int i = 1; i <= n; ++i) printf ("%d ", a[i]);
return 0;
}