STL中nth_element的用法

nth_element函數原型有四個,詳細我就不一一累贅了,咱們就用最普通的用法尋找第k位置的元素。數組

函數用法爲:nth_element(first,kth,end)。dom

first,last 第一個和最後一個迭代器,也能夠直接用數組的位置。
kth,要定位的第k個元素,能對它進行隨機訪問.函數

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

例如:3d

 1     vector<int> a(9);
 2     for(int i = 0; i < 9; i++)
 3         a[i] = i+1;
 4     random_shuffle(a.begin(),a.end());
 5     for(int i = 0; i < 9; i++)
 6         cout << a[i] << " ";
 7     cout << endl;
 8 
 9     nth_element(a.begin(),a.begin()+4,a.end());
10     cout << *(a.begin()+4) << endl;
11     
12     for(int i = 0; i < 9; i++)
13         cout << a[i] << " ";
14     cout << endl;

結果爲:code

能夠發現函數只是把kth的元素放在了正確位置,對其餘元素並無排序,因此能夠利用這個函數快速定位第k個元素,固然,這個函數也支持你直接寫比較函數,此處再也不累贅由於ACM中基本不會用到。
orm

那麼爲何要選擇這個函數呢,這就和複雜度有關了,nth_element的空間複雜度爲O(1),在數據量大的時候時間複雜度爲O(n),數據少的狀況最壞爲O(n^2),由於函數原理是隨機訪問,但實際運用過程當中,基本都會是O(n)的時間複雜度。因此說是很是迅速的。xml

相關文章
相關標籤/搜索