深海中的STL—nth_element


如果讓你求區間第\(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};
	nth_element(a + 1, a + 4, a + 8);
	for (int i = 1; i <= 8; i++) printf("%d ", a[i]); printf("\n");
	return 0;
}

輸出結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM