#include<iostream>
#include<ctime>
#include<cstdlib>
#include<algorithm>
using namespace std;
struct TwoInt{
int lr;
int rl;
};
TwoInt triplePartition(int * a,int l,int r){
int lr=l-1,rl=r+1;
int splitVal=a[l];
int i=l+1;
while(i<=r&&i<rl){
if(a[i]<splitVal){
swap(a[++lr],a[i++]);
}else if(a[i]>splitVal){
swap(a[i],a[--rl]);
if(i>=rl){
break;
}
continue;
}else{
i++;
}
}
TwoInt ti;
ti.lr=lr;
ti.rl=rl;
return ti;
}
void tripleQuickSort(int * a,int l,int r){
if(l>=r){
return ;
}
TwoInt ti=triplePartition(a,l,r);
tripleQuickSort(a,l,ti.lr);
tripleQuickSort(a,ti.rl,r);
}
int main(int argc,char ** argv){
int arrLength=100;
srand(time(0));
int * arrP=new int[arrLength];
for_each(arrP,arrP+arrLength,[](int &x){x=rand()%10;});
tripleQuickSort(arrP,0,arrLength-1);
for_each(arrP,arrP+arrLength,[](int &x){cout<<x<<" ";});
cout<<endl;
delete []arrP;
return 0;}