运行时间为nlgn
#include <cstdlib>
#include <iostream>
#include <vector>
#include <time.h>
using namespace std;
void input_v(vector<int> &v)
{
int data;
while(cin>>data)
{
v.push_back(data);
}
}
void print_v(const vector<int> &v)
{
for(vector<int>::const_iterator iter=v.begin();iter!=v.end();++iter)
cout<<*iter<<" ";
cout<<endl;
}
int partition(vector<int> &v,int s,int e) //每次都随机选择一个元素,并和最后一个元素交换
{
srand((unsigned int)time(NULL));
int p=rand()%(e-s+1)+s;
int temp=v[p];
v[p]=v[e];
v[e]=temp;
int insert_u=s-1;
for(int i=s;i<e;++i)
{
if(v[i]<v[e])
{
int temp=v[++insert_u];
v[insert_u]=v[i];
v[i]=temp;
}
}
temp=v[e];
v[e]=v[++insert_u];
v[insert_u]=temp;
return insert_u;
}
void p_sort(vector<int> &v,int s,int e)
{
if(s<e)
{
int p=partition(v,s,e);
p_sort(v,s,p-1);
p_sort(v,p+1,e);
}
}
int main(int argc, char *argv[])
{
vector<int> v;
input_v(v);
p_sort(v,0,v.size()-1);
print_v(v);
system("PAUSE");
return EXIT_SUCCESS;
}