求取vector中前n个最大值 c++

求取vector中前n个最大值

       如果只是需要取出数组中一些最大或最小的元素,可以利用nth_element函数快速定位第k个元素,该函数也支持直接写比较函数,对其他元素并没有排序, 将第n元素放到它该放的位置上,左边元素都大于等于它,右边元素都小于等于它。

  • nth_element函数
           nth_element的空间复杂度为O(1),在数据量大的时候时间复杂度为O(n),数据少的情况最坏为O(n^2),因为函数原理是随机访问,如果实际数据是随机分布的中,基本都会是O(n)的时间复杂度,效率比全部排序完再取是高很多的。
           简单的理解 nth_element() 函数的功能,当采用默认的升序排序规则(std::less)时,该函数可以从某个序列中找到第 n 小的元素 K,并将 K 移动到序列中第 n 的位置处。不仅如此,整个序列经过nth_element() 函数处理后,所有位于 K 之前的元素都比 K 小,所有位于 K 之后的元素都比 K 大。也可以将 nth_element() 函数的排序规则自定义为降序排序。
  • code如下
#include<iostream>
#include<algorithm>
#include <vector>

using namespace std;

bool myfunction(int i, int j) {
	return (i<j);
}
int main() {
	vector<int> vector_1 = { 1,7,9,2,3,2,4,3,3,3,3,0};
	int n = 2;
	nth_element(vector_1.begin(), vector_1.begin() + n, vector_1.end(), myfunction);
	for (int i = 0; i < vector_1.size(); i++)
		cout << vector_1[i] << " ";
	cout << '\n';
	return 0;
}

结果:
myfunction
i<j 为升序,输出结果:0 1 2 2 3 4 3 3 3 3 9 7 即第二小为1,其之后顺序不保证
i>j 为降序,输出结果:9 7 4 2 3 2 1 3 3 3 3 0 即第二大为7,其之后顺序不保证

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值