我发现nth_element的效果和sort一样啊,似乎是全排序而不是只找到了最小/最大的n个
下面这段代码在VC和GCC上编译运行结果是一样的:
#include "stdafx.h"
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
using namespace std;
int main()
{
int buf[]={3,29,4,27,15,9,2,4,7};
nth_element(buf,buf+3,&buf[9]);
copy(buf,&buf[9],ostream_iterator<int>(cout,","));
cout << endl;
int buf2[]={1,2,3,4,5,6,7,8,9};
nth_element(buf2,buf2+5,&buf2[9],greater<int>());
copy(buf2,&buf2[9],ostream_iterator<int>(cout,","));
return 0;
}
for(n=2;n<5000;n++)
{
vector<int> v(n);
for(int i=0;i<n;i++)
v[i] = n-i;
nth_element(v.begin(), v.begin() + n/2, v.end());
bool cont = true;
for(int i=0;i<n;i++)
if(v[i] != i+1)
{
cont = false;
cout<<n<<endl;
break;
}
if(!cont)
break;
}