1 回答

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
nth_element()是一個(gè)典型的部分排序算法。
它的第1和第3個(gè)參數(shù),定義的是排序的范圍(或則說nth_element這個(gè)算法或函數(shù)的作用范圍),稱著first和last,是一個(gè)[ )區(qū)間。在你的例子,分別對應(yīng)那個(gè)vector的begin和end;
第2個(gè)參數(shù)的意思是:如果一個(gè)序列的first和last半包含的范圍內(nèi),如果這個(gè)序列被排序了,那個(gè)第n個(gè)位置上的元素應(yīng)該是什么。---- 白話的解釋就是:如果給你一堆數(shù)據(jù),我想看看中間值是多少,第2大的數(shù)是什么? 你該如何解決呢? 全排序當(dāng)然可以,但如果數(shù)據(jù)多,效率也許就差了。這是只有部分排序即可,也就是說只有這第n個(gè)的位置被排對了,那么其他的就不管了,排序就可以解釋了。-- 這是nth_element的應(yīng)用意義。
以你的代碼為例:你的第2個(gè)參數(shù)是intVect.begin()+3,就是想看看intVect這個(gè)序列中,【如果排序的話】,它的第4個(gè)應(yīng)該是多少?這個(gè)intVect如果全排序,應(yīng)該是:
0 1 3 5 6 7 9,
因此nth_element在確保第4個(gè)元素=5的時(shí)候,就停止排序了。 因此你后面輸出intVect的值是:
1 0 3 5 9 6 7
就是第4個(gè)=5后,當(dāng)時(shí)intVect的值。
一般在nth_element()后,都有一個(gè)類似這樣的語句:
12 | nth_element(intVect.begin(),intVect.begin()+3,intVect.end()); cout << intVect[3]<< endl; |
給你添加一點(diǎn)代碼,體會(huì)一下nth_element的概念,它其實(shí)可以有【第4個(gè)參數(shù)】的:
1234 | nth_element(intVect.begin(), intVect.begin() + intVect.size()/2, intVect.end()); cout << "The median is " << intVect[intVect.size()/2] << endl; nth_element(intVect.begin(), intVect.begin() + 1, intVect.end(), greater< int >()); cout << "The second largest is " << intVect[1] << endl; |
之后在看看intVect的輸出:
123 | The median is 5 The second largest is 7 9 7 6 5 3 1 0 |
- 1 回答
- 0 關(guān)注
- 349 瀏覽
添加回答
舉報(bào)