#include<algorithm>
#include<ctime>
#include<vector>
#include<iostream>
using namespace std;
const int SIZE=25;
int main()
{
//create four vector for sorting algorithm
vector<int> v1;
vector<int> v2;
vector<int> v3(SIZE);
vector<int> v4(SIZE);
vector<int> v5(SIZE);
vector<int> v6(SIZE*2);
//create an iterator for the vecotrs
vector<int>::iterator iter;
//seed the random number generator
srand(time(0));
//fill the first vector with random numbers from 1 to 50;
for(int i=0;i<SIZE;i++)
{ v1.push_back(rand()%50);
v2.push_back(rand()%50+1);
}
//point the original vector
cout<<" original vector :"<<endl;
for(iter=v1.begin();iter!=v1.end();iter++)
cout<<*iter<<" ";
cout<<endl;
//copy vectors;
copy(v1.begin(),v1.end(),v3.begin());
copy(v1.begin(),v1.end(),v4.begin());
copy(v1.begin(),v1.end(),v5.begin());
//perform a stable_sort on the first vector
stable_sort(v1.begin(),v1.end());
//print out the stable_sort vector
cout<<" stable sort :"<<endl;
for(iter=v1.begin();iter!=v1.end();iter++)
cout<<*iter<<" ";
//perform a nth_element on the third vector
int n=15;
iter=v3.begin()+n;
nth_element(v3.begin(),iter,v3.end());
//print out the nth_element vector
cout<<endl<<" nth_element on the "<<n
<<"th element with nth value "<<v3[n-1]
<<":"<<endl;
for(iter=v3.begin();iter!=v3.end();iter++)
cout<<*iter<<" ";
//perform a stable_partition sort on the fourth vector
//iterator pointer to the first element that does not
//meet the criterion -odd numbers
//bind2nd is an C++ library function that create a unary predicate
//from two arguments
iter=stable_partition(v4.begin(),v4.end(),bind2nd(modulus<int>(),2))
;
//print out stable_partition vector
cout<<endl<<" stable partition sort for odd and even numbers "
<<" the partition element is "
<<*iter<<" :"<<endl;
for(iter=v4.begin();iter!=v4.end();iter++)
cout<<*iter<<" ";
cout<<endl;
//perform a partial sort on the five vector
int t=10;
iter=v5.begin()+n;
partial_sort(v5.begin(),iter,v5.end());
//print out partial sort
cout<<" partial sort the "<<v5[t-1]<<" elements :"<<endl;
for(iter=v5.begin();iter!=v5.end();iter++)
cout<<*iter<<" ";
cout<<endl;
//perform a merge sort
stable_sort(v2.begin(),v2.end());
cout<<"stable sort vector v2 :"<<endl;
for(iter=v2.begin();iter!=v2.end();iter++)
cout<<*iter<<" ";
cout<<endl;
merge(v1.begin(),v1.end(),v2.begin(),v2.end(),
v6.begin());
cout<<" merge v1 and v2 into V6 : "<<endl;
for(iter=v6.begin();iter!=v6.end();iter++)
cout<<*iter<<" ";
return 0;
}