1. 程式人生 > >深海中的STL—nth_element

深海中的STL—nth_element

主席樹 space ++ line str post 但是 element IT

如果讓你求區間第\(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