int partition(vector <int > &arr, int l, int r)
{
int key = arr[r];
int i = l-1 ;
for (int j = l; j <= r-1 ; j++){
if (arr[j] <= key){
i++;
swap(arr[j], arr[i]);
}
}
swap(arr[i+1 ], arr[r]);
return i+1 ;
}
void my_qsort(vector <int > &arr, int l, int r)
{
if (l < r) {
int m = partition(arr, l, r);
my_qsort(arr, l, m - 1 );
my_qsort(arr, m + 1 , r);
}
}
void QuikSort(int *a, int left , int right )
{
if (left < right ){
int key = a[left ];
int low = left ;
int high = right ;
while (low < high){
while (low < high && a[high] >= key)
high--;
a[low] = a[high];
while (low < high && a[low] <= key)
low++;
a[high] = a[low];
}
a[low] = key;
QuikSort(a, left , low-1 );
QuikSort(a, low+1 , right );
}
}