直接代码:
//将元素向前搬移 partition stable_partition
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
bool isoushu(int a){
return a%2==0;
}
int main(){
int a[]={1,2,3,4,5,6,7,8,9,10};
vector<int>v(a,a+10);
vector<int>vv(a,a+10);
partition(v.begin(),v.end(),isoushu);//偶数在前,但不保证是原来的相对位置
for(vector<int>::iterator itera=v.begin();itera!=v.end();++itera){//能被三整除放在前面
cout<<*itera<<" ";
}
cout<<endl;
partition(v.begin(),v.end(),not1(bind2nd(modulus<int>(),3)));
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl;
stable_partition(vv.begin(),vv.end(),not1(bind2nd(modulus<int>(),2)));//保持相对位置,这一点跟希尔排序是一样的
copy(vv.begin(),vv.end(),ostream_iterator<int>(cout," "));
cout<<endl;
system("pause");
return 0;
}
//排序算法
//sort,table_sort
#include<iostream>
#include<string>
#include<algorithm>
#include<functional>
#include<vector>
using namespace std;
bool lesslength(const string& s1,const string& s2){
return s1.length()<s2.length();
}
int main(){
int a[]={7,4,1,8,5,2,3,6,9,10};
string b[]={"1XX","2XXX","3XX","5XX","6XXXX","7XX","9XXXX","7XXXXXX","3X","2XXX"};
vector<int>v(a,a+10);
vector<string>vv(b,b+10);
sort(v.begin(),v.end());
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl;
sort(v.begin(),v.end(),greater<int>());
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
cout<<endl;
stable_sort(vv.begin(),vv.end(),lesslength);//相对位置不变
copy(vv.begin(),vv.end(),ostream_iterator<string>(cout," "));
cout<<endl;
system("pause");
return 0;
}