【算法】常用库函数

1.sort排序

sort函数包含在头文件中。在使用前需要#include < algorithm> 或使用万能头文件。sort是C++标准库中的一个函数模板,用于对指定范围内的元素进行排序。sort算法使用的是快速排序(QuickSort)或者类似快速排序的改进算法,具有较好的平均时间复杂度,一般为O(nlogn)。

1.1 sort基础用法

sort(起始地址,结束地址的下一位,*比较函数);比较函数默认升序,是小于号“<”.

int a[1000];
int n;
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)cin>>a[i];
	//排序 
	sort(a,a+n);//左开右闭 
	for(int i=0;i<n;i++) cout<<a[i]<<" "; 
 } 

在这里插入图片描述
sort(起始地址,结束地址的下一位,*比较函数);

int main()
{
	vector<int> v={5,1,9,6,78,2};
	//排序
	sort(v.begin(),v.end());
	//输出
	for(int i=0;i<v.size();++i) cout<<v[i]<<' '; 
	cout<<"\n";
	for(auto i:v) cout<<i<<' ';
 } 

在这里插入图片描述

1.2 自定义比较函数

sort默认使用小于号进行排序,如果想要自定义比较规则,可以传入第三个参数,可以是函数或lambda表达式。

bool cmp(const int& u,const int& v)
{
	return u>v;
}

int main()
{
	vector<int> v={5,1,9,6,78,2};
	//降序排列 
	sort(v.begin(),v.end(),cmp);
	//输出
	for(int i=0;i<v.size();++i) cout<<v[i]<<' '; 

 } 

2.最值查找

2.1 min和max函数

在这里插入图片描述

2.2 min_element和max_element函数

在这里插入图片描述

2.3 nth_element函数

在这里插入图片描述

3.二分查找

3.1 二分查找的前提

库函数只能对数组进行二分查找。对一个数组进行二分查找的前提是这个数组中的元素是单调的,一般为单调不减,当然如果是单调不增也可以(需要修改比较函数)。例如:
例如:
[1,5,5,9,18]是单调的
[1,9,9,7,15]不是单调的
[9,8,8,7,7,1]是单调的

3.2 binary_search函数

binary_search是C++标准库中的一个算法函数,用于在已排序的序列(例如数组或容器)中查找特定元素。它通过二分查找算法来确定序列中是否存在目标元素。函数返回一个bool值,表示目标元素是否存在于序列中。如果需要获取找到的元素的位置,可以使用std::lower_bound函数或std::upper_bound函数。在这里插入图片描述

3.3 lower_bound和upper bound

前提:数组必须为非隆序。如果要在非升序的数组中使用,可以通过修改比较函数实现(方法与sort自定义比较函数类似)
lower_bound(st,ed,x)返回地址[st,ed)中第一个大于等于x的元素的地址。
upper_bound(st,ed,x)返回地址[st,ed)中第一个大于x的元素的地址。
如果不存在则返回最后一个元素的下一个位置,在vector中即end()。

int main()
{
	vector<int> v={5,1,9,6,78,2};
	sort(v.begin(),v.end());
	for(int i=0;i<v.size();++i) cout<<v[i]<<' '; 
	cout<<(lower_bound(v.begin(),v.end(),8)-v.begin())<<"\n";//地址-首地址=下标 
 } 

在这里插入图片描述

4.大小写转换

4.1 islower/isupper函数

在这里插入图片描述

4.2 tolower/toupper函数

在这里插入图片描述

5.全排列

5.1 next_permutation()函数

next_permutation函数用于生成当前序列的下一个排列。它按照字典序对序列进行重新排列,如果存在下一个排列,则将当前序列更改为下一个排列,并返回true;如果当前序列已经是最后一个排列,则将序列更改为第一个排列,并返回false。
例如:
在这里插入图片描述

5.2 prev-permutation()函数

prev_permutation函数与next_permutation函数相反,它用于生成当前序列的上一个排列。它按照字典序对序列进行重新排列,如果存在上一个排列,则将当前序列更改为上一个排列,并返回true;如果当前序列已经是第一个排列,则将序列更改为最后一个排列,并返回false。在这里插入图片描述

6.其他库函数

6.1 memset()函数

memset()是一个用于设置内存块值的函数.它的原型定义在头文件中,函数的声明如下:
在这里插入图片描述

在这里插入图片描述

6.2 swap()函数

在这里插入图片描述

6.3 reverse()函数

reverse()是一个用于反转容器中元素顺序的函数
它的原型定义在头文件中,函数的声明如下:
在这里插入图片描述
在这里插入图片描述

6.4 unique()函数

unique()是一个用于去除容器中相邻重复元素的函数。它的原型定义在头文件中,函数的声明如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

㚐夵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值