template<typename T>
void __Quacksort(T arr[],int l,int r)
{
if(l>=r)
return;
intp=partition(arr,l,r);
__Quacksort(arr,l,p-1);
__Quacksort(arr,p+1,r);
}
template<typenameT>
intpartition(T arr[],int l,int r){
T v=arr[l];
//arr[l+1....j]<v,arr[j+1...r)>v
intj=l;
for(inti=l+1;i<=r;i++)
if(v>arr[i]){
j++;
swap(arr[i],arr[j]);
}
swap(arr[l],arr[j]);
returnj;
}
template<typenameT>
voidQuacksort(T arr[],int n){
__Quacksort(arr,0,n-1);
}