C++的STL模板類 nth_element

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

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

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

將第k_th 元素放到它該放的位置上,左邊元素都小於它,右邊元素都大於它.

但是它並不保證其他元素有序!這個函數的期望複雜度是O(n)的 !


原理如下: 
在當前區間[L,R]上,找一個基準位置mid 
通過線性的掃描交換, 
使得[L,mid)的元素都比mid小,(mid,R]的元素都比mid大 
此時mid上的元素就是第mid小的 
然後判斷k在哪半邊,繼續遞歸處理

所以這樣就達到了期望的O(N)複雜度

 

可以用來線性求中位數:博客鏈接:https://blog.csdn.net/baodream/article/details/83045492

 

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