C语言的编程题目
编写一个程序,将整型数组中所有小于0的元素放到所有大雨于0的元素的前面,要用效率高的方法,
for(i=0,j=0;i<N;i++) if(a[i]<0)b[j++]=a[i]; for(i=0;i<N;i++) if(a[i]>0)b[j++]=a[i];
这样不知行么?N为数组的元组个数。
虽然用了三个循环,但实际比较次数不大于N次
程序代码:#include<iostream>
#include<functional>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec;
vec.push_back(1);
vec.push_back(3);
vec.push_back(-2);
vec.push_back(4);
vec.push_back(-3);
vector<int>::iterator it=partition(vec.begin(),vec.end(),bind2nd(less<int>(),0));
for(vector<int>::const_iterator iter=vec.begin();iter!=vec.end();iter++)
{
cout<<*iter<<" ";
}
cout<<endl;
return 0;
}