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