STL中sort()函数的用法(C++ 入门 例题讲解)

在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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值