C++的STL模板类 nth_element

nth_element()函数详解 在强大的STL库中存在一个神奇的函数,那就是nth_element,这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用,可谓十分实用。 阅读详情

在c++的stl库中,提供了nth_element这样一个函数,头文件algorithm

它的用法是nth_element(a+l,a+k,a+r)

这样它会使a这个数组中区间(l,r)内的第k大的元素处在第k个位置上(相对位置)

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

但是它并不保证其他元素有序!这个函数的期望复杂度是O(n)的 !


原理如下: 
在当前区间[L,R]上,找一个基准位置mid 
通过线性的扫描交换, 
使得[L,mid)的元素都比mid小,(mid,R]的元素都比mid大 
此时mid上的元素就是第mid小的 
然后判断k在哪半边,继续递归处理

所以这样就达到了期望的O(N)复杂度

 

可以用来线性求中位数:博客链接:https://blog.youkuaiyun.com/baodream/article/details/83045492

 

相关推荐

优刻得首个「国产千卡智算集群」落地,支持智源千亿大模型训练

在人工智能引领的时代浪潮中,算力已成为技术进步与创新的核心驱动力。面对当下AI算力需求的飙升、高端AI芯片供应受限的挑战,加之OpenAI带来的技术封锁,唯有坚定不移的发展自主可控的国产技术方案,持续壮大国产智算集群规模,才能一路突破围追堵截,进一步促进国产大模型产业生态繁荣。集群还提供了完善高效的软件栈工具,集成多种主流的深度学习编程框架,通过测试验证,确保了对行业领先人工智能模型的高效支持,做到开箱即用,用户可快速投入模型的开发和部署,加速了其在人工智能领域的布局和发展。方面取得了显著成效。

Ucloud_TShare的博客 1473

nth_element详解

比如a[6]={2,5,6,4,7,8},使用nth_element(a,a+3,a+6)后,区间中第四个数,也就是a[3],会被放入数组中第三小的数,也就是6。nth_element()是c++的STL库中的函数,作用是将数组中第k小的整数放在区间第k个位置。使用一次nth_element()的时间复杂度为。如果a数组不从0开始,则需做一些调整。...

tanjunming2020的博客 5691

Nvidia Tesla A100 驱动安装方法

Nvidia Tesla A100 驱动安装方法 遇到的问题:以前安装tesla系列、geforce系列等gpu 驱动的时候,只需执行nvidiaxxxx.run驱动包或者安装nvidiaxxxx.rpm包即可,但遇到新的GPU Nvidia Tesla A100的时候,安装完驱动似乎不起作用,找了半天资料,原来需要以下步骤才可以使用;

qq_24343177的博客 2万+

c++ nth_element()函数

一、作用 查找第n小的元素 二、用法 nth_element(起始地址,查找元素的下标,最后一个元素地址+1); nth_element(起始地址,查找元素的下标,最后一个元素地址+1,自定义排序); 举例: 查找数组中第6小的元素 #include<iostream> #include<algorithm>//必要头文件 using namespace std; int main(){ int a[10]={1,5,6,3,9,2,8,7,4,10}; nth_element

weixin_52115456的博客 3172

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5424

7 series FPGAs Transceiver Wizard IP核使用和测试

学习FPGA一段时间了,前面一直没有系统的总结,这学期把在项目中用到的IP核和一些调试过程中遇到的问题总结一下发出来,坚持下去,一起进步! 今天总结一下的GTH核的使用和测试。 软件版本:Vivado 2017.4 IP核版本:7 Series FPGAs Transceivers Wizard (3.6) FPGA:xc7vx690tfft1927 实现功能: 四路光纤数据接收,由于GTX IP...

qq_39921762的博客 1万+

C++STL库:nth_element()

作用:查找第k小(大)的元素。

Liyolo007的博客 507

TMC5130/TMC5160步进电机驱动芯片深度解析与工程实践

步进电机驱动芯片是精密运动控制系统的物理执行核心,其性能直接决定定位精度、运行噪声与系统鲁棒性。基于电流闭环控制与电压前馈调制的混合驱动原理,现代智能驱动芯片如TMC51X0系列实现了微步插补、堵转检测和片上运动规划等关键技术突破。这类芯片通过SPI寄存器级配置实现StealthChop静音驱动与SpreadCycle高动态响应模式的无缝切换,在3D打印、CNC、机器人关节等场景中显著提升能效比与控制带宽。本文围绕TMC5130与TMC5160的硬件架构差异、寄存器操作时序、驱动模式物理机制及FreeRTO

weixin_35797963的博客 410

nth_element函数——C++快速选择函数

nth_element函数——C++快速选择函数

2401_88591507的博客 2834

IAR for ARM 搭建STM32F103C8T6工程模板(实战指南)

本文详细介绍了如何在IAR for ARM开发环境中为STM32F103C8T6微控制器搭建完整的工程模板。从环境准备、固件库获取、目录结构设计到工程配置与编译调试,提供了实战指南和常见问题解决方案,帮助开发者快速建立稳定的STM32开发环境。

fun88的博客 988

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2236

C++ nth_element()函数

nth_element()函数核心功能是对给定范围元素重新排列,使nth指向的元素在排列后,处于其在整个序列排序后的正确位置。此位置前的所有元素都小于或等于(默认情况)该位置元素,之后的所有元素都大于或等于该位置元素。需注意,该函数不保证整个序列完全排序,仅确保nth位置元素处于正确位置。

weixin_62059655的博客 1716

潜望式长焦模组全解析:结构构造、光路设计与工程实战挑战

随着移动影像能力的不断进化,潜望式长焦模组成为旗舰手机实现 5x 甚至 10x 光学变焦的关键配置。相比传统横向堆叠镜组,潜望式结构通过反射棱镜实现纵向空间上的光路折叠,有效解决了模组厚度与变焦行程的矛盾问题。然而,高倍变焦模组不仅面临复杂的光学路径设计,还涉及反射损耗控制、防抖马达配合、模组热应力管控与 ISP 畸变校正等一系列工程难点。本文将结合主流机型的实战经验,深入解析潜望式长焦模组的结构构造与调试路径,为影像系统工程师提供完整的实战参考。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3139

C++中的模板类及常用STL

在竞赛、考试中,我们经常需要使用到一些数据结构,如优先队列,堆栈等。其实一些基础的数据结构早已被c++封装为模板库供大家使用,本文介绍了c++中一些常用的stl,希望对大家的竞赛、考试有所帮助。

m0_52386766的博客 1361

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

STL 之 nth_element详解

C++的STL库中的nth_element()方法,默认是求区间第k小的(划重点)。 举个栗子求第3小,对于 a[9]={4,7,6,9,1,8,2,3,5}; nth_element(a,a+2,a+9),将下标为2,也就是第3个数放在正确的位置,求的是第3小的数a[2]。(下标从零开始) nth_element(a,a+k,a+n),函数只是把下标为k的元素放在了正确位置,对其它元素并没...

sugarbliss 3万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【C++修行之道】竞赛常用库函数(sort,min和max函数,min_element和max_element、nth_element)

语法参数(1)start表示要排序数组的起始地址;(2)end表示数组结束地址的下一位;(3)cmp用于规定排序的方法,可不填,默认升序。功能sort函数用于C++中,对给定区间所有元素进行排序,默认为升序,也可进行降序排序。一般是直接对数组进行排序,例如对数组a[10]排序,sort(a,a+10)。而sort函数的强大之处在可与cmp函数结合使用,即自定义排序:如果你想按照特定的顺序排序,可以传递一个自定义的比较函数或lambda表达式给sort()。

走在努力路上的自己的博客 2619

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

nth_element() nth_element() 函数头文件:algorithm.h //求第m大的元素 arr[n]; std::nth_element(arr, arr+m, arr+n); 介绍功能 将第 m 大的元素放在 arr 数组中适当位置 注意 ①、函数是将第 m 大的元素放在 arr 数组中适当位置,其他元素按照第 m 元素的大小划分。 在[ 0, n ]这个范围内,在第 m 个元素之前的元素都小于或等于第 m 个元素,而且第 m 个元素后面的每个元素都会比它大。 ②、用户可自定义排

Zhengyangxinn的博客 5206

STL中的nth_element()方法的使用

STL中的nth_element()方法的使用 通过调用nth_element(start, start+n, end) 方法可以使第n大元素处于第n位置(从0开始,其位置是下标为 n的元素),并且比这个元素小的元素都排在这个元素之前,比这个元素大的元素都排在这个元素之后,但不能保证他们是有序的,下面是这个方法的具体使用方法.#pragma warning(disable: 4786)

国风崽的窝 3万+

c++ STL 区间第k大 nth_element()

c++ STL 区间第k大 nth_element() 使用方法: 头文件:algorithm 使用: 三个参数,数组(容器)要操作区间的起始地址、第k个、数组(容器)要操作区间的结束地址 nth_element( begin , begin + (k-1) , end) (起始为0,所以为k-1) 在使用该函数后,数组(容器)操作区间的第 k个元素则为第k大的元素,两边元素的顺序可能会不同,但它左边的元素都比它大,而右边的元素都比它小 #include<algorithm> #include

Aajbelieve的博客 1749

c++ nth_element用法

nth_element实际上就是快速选择算法的实现,快速选择算法实现原理具体见这里。 void nth_element (Iterator first, Iterator first+nth, Iterator last, Compare comp); 重新排列range[first,last)中的元素,使第n个位置的元素是按排序顺序在该位置的元素。 其他元素没有任何特定的顺序,只是第n个元...

qq_40692109的博客 3394

c++的stl库之nth_element函数

nth_element函数 好久没用补题了,今天去牛客补了几道水题,其中一道是要在无序表中快速找到第k小的数,这道题数据太大了,用sort()和partial_sort() 都会超时,垃圾的我一开始就是直接用sort写的,不出意料的超时了,接着又尝试了桶排序,自己又tle了,然后无聊的翻了下群,发现有个人说nth_element函数可以快速做完这道题,顿时感觉孤陋...

梦独吟 1244

C++ STL nth_element原理与应用

LZ最近的考试中,某题可以通过调用nth_element()来水过70%的数据 但是LZ并不会啊(历史总是惊人的相似) 于是就有了这篇blog在编写代码时,有时会有“在一个无序表中快速得到第K小的元素”的需求 而直接排序 不能水过一些测试点 时间不能承受 于是STL的algorithm头文件就给我们提供了nth_element()这样的部分排序函数调用的正确姿势是这样的:nth_elemen

linkfqy 1万+

C++的nth_element()函数

1 前言 近期学习K-D Tree,用到了nth_element,然而不是很确定具体的用法 然而,在网上搜索、点了几篇博客要么写的不是很清楚,要么干脆直接是错的 于是这篇博客用来记录我个人对nth_element的理解,希望能对你有所帮助,如果我自己忘了也能看这篇博客记起来 2 相关信息 2.1 所需头文件 #include<algorithm> 2.2 使用格式 有个一...

AffectiveComputing的博客 2233

C++STL库的函数 nth_element

C++STL函数nth_element.

m0_61245168的博客 1083

STL源码解析 - nth_element

STL源码解析 - nth_element

qingyang1014的专栏 1016

【STL】nth_element 进行部分排序

是 C++ 标准模板库(STL)中的一个算法,它对容器中的元素进行部分排序。它的作用是保证容器中第 n 个位置(从 0 开始计数)的元素是它在完全排序后的容器中应有的位置,并且它左边的所有元素都不大于它,右边的所有元素都不小于它。但并不会对整个容器进行完全排序,这使得它在某些情况下比完全排序算法(如sort)更高效。#include <algorithm> // 包含 nth_element// 降序比较。

Eddie3524的博客 682
上一篇: O(N)线性求中位数,线性求第k大
下一篇: 快速排序
baodream
博客等级 码龄10年 55粉丝 239原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值