C++STL库神器:nth_element() 详解

本文详细介绍了C++ STL中的nth_element()函数,包括其功能、注意事项以及用户自定义排序方式。该函数能将数组中第m大的元素定位,并通过实例展示了如何找出序列中的第k小元素,适用于高效处理大数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nth_element()

nth_element() 函数头文件:algorithm.h

功能介绍
arr[n];
//默认求第m大的元素
std::nth_element(arr, arr+m, arr+n);

//定义cmp可求第m小的元素
bool cmp(int a, int b){
	return a>b;
}
std::nth_element(arr, arr+m, arr+n, cmp);
注意

①、函数是将第 m 大的元素放在 arr 数组中适当位置,其他元素按照第 m 元素的大小划分。
在[ 0, n ]这个范围内,在第 m 个元素之前的元素都小于或等于第 m 个元素,而且第 m 个元素后面的每个元素都会比它大。

②、用户可自定义排序方式(第 m 大元素或第 m 小元素)。
算法默认将小于或等于第 m 的元素排在第 m 的元素的前面,大于第 m 的元素排在第 m 的元素后面。
用户可自定义排序方式,这个特性与sort函数相同。

③、nth_element()函数仅将第 m 大/小的数在 arr 数组中排好了位置,并不返回值。输出 arr[m] 即是第 m 大/小的数。


例题练习
输入 n(n<5000000 且 n 为奇数) 个数字 ai(0<ai<109),输出这些数字的第 k 小的数。最小的数是第 0 小。
洛谷测试平台

#include<cstdio>
#include<algorithm>
#include<string.h> 
#define ll long long
using namespace std;
ll arr[5000010];

int main(){
	int n, m;
	memset(arr, 0, sizeof(arr));
	scanf("%d%d", &n, &m);
	for(int i=0; i<n; i++){
		scanf("%lld", &arr[i]);
	}
	nth_element(arr, arr+m, arr+n);
	printf("%lld", arr[m]);
	return 0;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值