#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
//两个版本
void show(vector<int> &v)
{
vector<int>::iterator pos;
for(pos = v.begin();pos != v.end();pos++)
cout<<*pos<<" ";
cout<<endl;
}
//第一个版本算法导论上面的那个
int partition1(vector<int> &v,int l,int r)
{
int temp;
int i = l-1;
for(int j = l;j < r;j++)
{
if(v[j] <= v[r])
{
i++;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
}
temp = v[i+1];
v[i+1] = v[r];
v[r] = temp;
return i+1;
}
void quickSort1(vector<int> &v,int l,int r)
{
if(l < r)
{
int m = partition1(v,l,r);
quickSort1(v,l,m-1);
quickSort1(v,m+1,r);
}
}
//严蔚敏数据结构上的
int partition2(vector<int> &v,int l,int r)
{
int key = v[l];
int i = l;
int j = r;
while(i < j)
{
while(v[j] >= key&&j > i)
{
j--;
}
if(j>i)
v[i] = v[j];
while(v[i] <= key&&j > i)
{
i++;
}
if(j > i)
v[j] = v[i];
}
v[j] = key;
return j;
}
void quickSort2(vector<int> &v,int l,int r)
{
if(l < r)
{
int m = partition2(v,l,r);
quickSort2(v,l,m-1);
quickSort2(v,m+1,r);
}
}
void main()
{
const int N = 200;
vector<int> v,v1;
v.reserve(N);
for(int i = 0;i<N;i++)
v.push_back(rand()%100);
cout<<"******************初始数据******************"<<endl;
show(v);
quickSort1(v,0,N-1);
cout<<"******************排序数据******************"<<endl;
show(v);
v1.reserve(N);
for(int i = 0;i<N;i++)
v1.push_back(rand()%100);
cout<<"******************初始数据******************"<<endl;
show(v1);
quickSort2(v1,0,N-1);
cout<<"******************排序数据******************"<<endl;
show(v1);
int m;
cin>>m;
}
倒腾了一下 两种版本的快排 回来再说吧!