码迷,mamicode.com
首页 > 其他好文 > 详细

深海中的STL—nth_element

时间:2018-03-04 10:32:31      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:ima   post   code   inf   区间   str   main   alt   using   

如果让你求区间第\(k\)大,你会怎么做呢?

主席树?确实是个不错的选择(不过像我这种垃圾还是乖乖打暴力吧)

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

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

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

但是它并不保证其他元素有序!

不过根据网友的实验,貌似在vs上是有序的,不过在dev中是无序的

时间复杂度:\(O(n)\)

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    static int a[15]={0,1,2,5,7,3,4,1};
    for(int i=1;i<=8;i++) printf("%d ",a[i]);printf("\n");
    nth_element(a,a+4,a+8);
    for(int i=1;i<=8;i++) printf("%d ",a[i]);printf("\n");
    
    return 0;
} 

输出结果

技术分享图片

深海中的STL—nth_element

标签:ima   post   code   inf   区间   str   main   alt   using   

原文地址:https://www.cnblogs.com/zwfymqz/p/8503692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!