在C++中,sort()
函数是一个标准库函数,用于对容器中的元素进行排序。sort()
函数使用快速排序算法实现,时间复杂度为O(nlogn)。
首先说明sort的用法,头文件<algorithm>。
形式一:sort(begin,end)默认是从小到大排序
形式二:sort(begin,end,cmp)cmp为自定义排序方式
自定义cmp函数返回true或false作用
bool cmp(int num1, int num2)// 实现降序排列
{
return num1 > num2; // num1大于num2时返回true,否则返回false
}
自定义函数返回值为bool
类型
- 若返回
true
,则表示num1
与num2
应该交换顺序; - 若返回
false
, 则num1
与num2
保持原有顺序; -
对 2, 5, 1, 3, 4 降序排列 调用cmp函数时,将5赋值给num1, 2赋值给num2 (注意顺序) 5 > 2, 返回true,num1 与 num2需进行交换;即5应该在2的前面 数组变为 5, 2, 1, 3, 4 第二次 将3赋值给num1, 1赋值给num2, 3 > 1, 返回true,num1 与 num2需进行交换;即3应该在1的前面 数组变为 5, 2, 3, 1, 4 之后经过数次的比较与交换最终排序完成。 最终得到 5 4 3 2 1
运用sort自定义结构体排序就会方便很多
例题1:
输入:
第一行包含两个数n,K表示每天要吃的巧克力数量和要在早上吃的数量。(n <= 100000, K <= n)
第二行包含n个整数Ai(1 <= i <= n) 表示个第i个巧克力在早上吃可得到的甜蜜值 (Ai <= 100000)
第三行包含n个整数Bi(1 <= i <= n) 表示个第i个巧克力在晚上吃可得到的甜蜜值 (Bi <= 100000)
输出:
输出仅一行包含一个整数表示能获得的最大甜蜜值。
#include<iostream>
#include<algorithm>
#define N 100005
using namespace std;
struct node
{
int a;
int b;
};
bool cmp(node a, node b)
{
return (a.a - a.b) > (b.a - b.b);//早上值减去晚上值大的排在前面,就可以将早上吃巧克力利益最大的排在前面
}
int main()
{
int n, k;
cin >> n >> k;
int i;
node s[N];
for (i = 0; i < n; i++)
{
cin >> s[i].a;
}
for (i = 0; i < n; i++)
{
cin >> s[i].b;
}
long long sum = 0;
sort(s, s + n, cmp);
for (i = 0; i < k; i++)
sum += s[i].a;
for (i = k; i < n; i++)
{
sum += s[i].b;
}
cout << sum;
return 0;
}