目录
sort简介
sort函数包含在头文件<algorithm>中。sort是c++中的一个函数模板,用于对指定范围内的元素进行排序。
sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法,具有较好的平均时间复杂度,一般为O(nlogn)。
sort的用法
sort(起始地址,结束地址的下一位,*比较函数)比较函数可有可无
示例代码1
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[1000];
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
//对数组排序
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
{
cout << a[i] << ' ';
}
system("pause");
return 0;
}
代码运行结果
示例代码2
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int>v = { 6,3,2,7,1 };
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
system("pause");
return 0;
}
代码运行结果
自定义比较函数
sort默认小于号排序,要想自定义排序,需要传入第三个参数,可以是函数或者lambda表达式。
例子代码
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(const int& u, const int& v)
{
return u > v;
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int>v = { 5,1,2,11,3,9 };
sort(v.begin(), v.end(), cmp);
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
system("pause");
return 0;
}
代码输出结果
lamada表达式(匿名函数)
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(const int& u, const int& v)
{
return u > v;
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
vector<int>v = { 5,1,2,11,3,9 };
sort(v.begin(), v.end(), [](const int& u, const int& v)
{
return u > v;
});
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << ' ';
}
system("pause");
return 0;
}
结构体可以将小于号重载后进行排序
struct Node
{
int u, v;
bool operator<(const Node& m)const
{
//以u为第一关键字,v为第二关键字
return u == m.u ? v < m.v : u < m.u;
}
};