STL中nth_element的用法

简介: nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素。 函数用法为:nth_element(first,kth,end)。 first,last 第一个和最后一个迭代器,也可以直接用数组的位置。

nth_element函数原型有四个,详细我就不一一累赘了,我们就用最普通的用法寻找第k位置的元素。

函数用法为:nth_element(first,kth,end)。

first,last 第一个和最后一个迭代器,也可以直接用数组的位置。
kth,要定位的第k个元素,能对它进行随机访问.

将第k_th元素放到它该放的位置上,左边元素都小于等于它,右边元素都大于等于它.

例如:

 1     vector<int> a(9);
 2     for(int i = 0; i < 9; i++)
 3         a[i] = i+1;
 4     random_shuffle(a.begin(),a.end());
 5     for(int i = 0; i < 9; i++)
 6         cout << a[i] << " ";
 7     cout << endl;
 8 
 9     nth_element(a.begin(),a.begin()+4,a.end());
10     cout << *(a.begin()+4) << endl;
11     
12     for(int i = 0; i < 9; i++)
13         cout << a[i] << " ";
14     cout << endl;

结果为:

可以发现函数只是把kth的元素放在了正确位置,对其他元素并没有排序,所以可以利用这个函数快速定位第k个元素,当然,这个函数也支持你直接写比较函数,此处不再累赘因为ACM中基本不会用到。

那么为什么要选择这个函数呢,这就和复杂度有关了,nth_element的空间复杂度为O(1),在数据量大的时候时间复杂度为O(n),数据少的情况最坏为O(n^2),因为函数原理是随机访问,但实际运用过程中,基本都会是O(n)的时间复杂度。所以说是非常迅速的。

 

目录
相关文章
|
7月前
|
JavaScript
jQuery :nth-of-type(n)选择器的用法详解
jQuery中,:nth-of-type(n)选择器可以对selector选择器匹配选择到的所有HTML元素进行二次匹配选择,为了更好地阐述:nth-of-type(n)的语法,这里假设selector是一个元素p选择器,如此,:nth-of-type(n)可以用于匹配p元素选择器选择到的p元素指向的父元素中第n个类型为p的子元素,而且与p是否是该父元素的第n个子元素无关,比如
62 5
|
3月前
|
JavaScript 前端开发 索引
JavaScript 数组中splice()的用法
本文介绍了JavaScript数组方法splice()的三种用法:删除元素、插入元素和替换元素,通过具体代码示例展示了如何使用splice()方法进行数组的修改操作。
|
数据可视化 JavaScript
element-plus 树形控件用法
element-plus 树形控件是一种常用的可视化组件,可以展示树型结构的数据。以下是 element-plus 树形控件的用法。
580 0
|
前端开发
css中:nth-child()和nth-of-type有何区别详解
css中:nth-child()和nth-of-type有何区别详解
105 0
|
JavaScript 前端开发 索引
|
前端开发
css选择器nth-child和nth-of-type区别
css选择器nth-child和nth-of-type区别
css选择器nth-child和nth-of-type区别
|
JavaScript 前端开发 测试技术
JavaScript 中数组 sort() 方法的基本使用
在日常的代码开发中,关于数组排序的操作可不少,JavaScript 中可以调用 sort 方法对数组进行快速排序。
163 0
JavaScript 中数组 sort() 方法的基本使用
|
JavaScript 前端开发 网络架构
JavaScript展开操作符(Spread operator)介绍
本文介绍JavaScript的展开操作符(Spread operator)...。本文适合ES6初学者。
C# 中?和??的用法
最近在看官方的源码时,经常看到有   Int? sum;  和   FileProvider = FileProvider ??builder.GetFileProvider(); 一个问号:   很多数据类型时不允许为空的,比如int类型,在类型的后面加? 表示允许该数据为nu...
1050 0