STL中的nth_element( )函數

作者:自爲風月馬前卒

個人博客http://attack204.com//

出處:http://zwfymqz.cnblogs.com/

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

-------------------------無數次都想自己寫,突然發現有寫的非常好的,在此謝謝作者,轉載一下,也相當於記錄一下學習筆記!

正文:

如果讓你求區間第kk大,你會怎麼做呢?

主席樹?確實是個不錯的選擇(不過像我這種垃圾還是乖乖打暴力吧)


在c++的stl庫中,提供了nth_element這樣一個函數

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

這樣它會使a這個數組中區間[l,r)[l,r)內的第kk小的元素處在第kk個位置上(相對位置)

但是它並不保證其他元素有序!




不過根據網友的實驗,貌似在vs上是有序的,不過在dev中是無序的

時間複雜度:O(n)O(n)

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

輸出結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章