c 的stl庫之nth element函式

2021-10-23 17:53:00 字數 529 閱讀 8396

nth_element()

例子:陣列a在第1-n位置有元素,現求第k大的數

nth_element(a+1,a+k,a+n+1,cmp)
注意,**中的cmp可以刪去,如果不使用cmp函式,預設是「<」

原理:在當前區間[l,r]上,找乙個基準位置mid

通過線性的掃瞄交換,類似快排的一部分,

使得[l,mid)的元素都比mid小,(mid,r]的元素都比mid大

此時mid上的元素就是第mid小的

然後判斷k在哪半邊,繼續遞迴處理

所以這樣就達到了期望的o(n

)複雜度

**:

#includeusing namespace std;

int a[5000006];

inline int read()

while(ch >= '0' && ch <= '9')

return x * f;

}int main()

}

C 之STL庫簡單介紹

1.sort 可以自己定義新的結構體陣列排序,sort第三個引數可以設定為根據哪個值排序 int a int n sizeof a sizeof int sort a,a n for int i 0 i2.string string s 46237879426 排序 sort s.begin s.e...

C 學習筆記之 STL 庫 queue

queue 佇列是一種容器介面卡,專門用來滿足先進先出的操作,也就是元素在容器的一端插入並從另一端提取。優先順序佇列是一種容器介面卡,根據一些嚴格的弱排序標準,專門設計使其第乙個元素始終是它包含的最值元素。其本質上就是乙個大頂堆或者小頂堆,會在需要時自動呼叫函式 make heap,push hea...

C 標準模板庫(STL)之vector

vector即長度可變的陣列 標頭檔案宣告 include using namespace std 1.定義 vector int v vectorint age 兩個 之間需加空格,不然會被誤以為是移位操作 vector int vi 100 vector陣列,vi 0 vi 99 每乙個都是乙個...