#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template <class T>
void printVector(vector<T>& A) {
for(int i=0; i < A.size(); ++i)
cout << A[i] << " ";
cout << endl;
}
template <class T>
int partition(vector<T>& arr, int left, int right, int piv) {
int leftmostSmallerThanPivot = left;
if(piv != left)
swap(arr[piv], arr[left]);
for(int i=left+1; i <= right; ++i) {
if(arr[i] < arr[left])
swap(arr[++leftmostSmallerThanPivot], arr[i]);
}
swap(arr[left], arr[leftmostSmallerThanPivot]);
return leftmostSmallerThanPivot;
}
template <class T>
void quickSort(vector<T>& arr, int p, int r) {
if (p < r) {
int q, piv(p);
piv = ((p + r) / 2); // doesn't work
q = partition(arr, p, r, piv);
quickSort(arr, p, q - 1); //Sort left half
quickSort(arr, q + 1, r); //Sort right half
}
}
int main()
{
vector<int> A(10);
for(int i=0; i < 10; ++i)
A[i] = 10 - i;
quickSort(A, 0, 9);
printVector(A);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIHByaW50VmVjdG9yKHZlY3RvcjxUPiYgQSkgewoJZm9yKGludCBpPTA7IGkgPCBBLnNpemUoKTsgKytpKQoJCWNvdXQgPDwgQVtpXSA8PCAiICI7Cgljb3V0IDw8IGVuZGw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbnQgcGFydGl0aW9uKHZlY3RvcjxUPiYgYXJyLCBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgcGl2KSB7CglpbnQgbGVmdG1vc3RTbWFsbGVyVGhhblBpdm90ID0gbGVmdDsKCglpZihwaXYgIT0gbGVmdCkKCQlzd2FwKGFycltwaXZdLCBhcnJbbGVmdF0pOwoJZm9yKGludCBpPWxlZnQrMTsgaSA8PSByaWdodDsgKytpKSB7CgkJaWYoYXJyW2ldIDwgYXJyW2xlZnRdKQoJCQlzd2FwKGFyclsrK2xlZnRtb3N0U21hbGxlclRoYW5QaXZvdF0sIGFycltpXSk7Cgl9Cglzd2FwKGFycltsZWZ0XSwgYXJyW2xlZnRtb3N0U21hbGxlclRoYW5QaXZvdF0pOwoKCXJldHVybiBsZWZ0bW9zdFNtYWxsZXJUaGFuUGl2b3Q7Cn0KICAgICAKdGVtcGxhdGUgPGNsYXNzIFQ+CnZvaWQgcXVpY2tTb3J0KHZlY3RvcjxUPiYgYXJyLCBpbnQgcCwgaW50IHIpIHsKICAgIGlmIChwIDwgcikgewogICAgICAgIGludCBxLCBwaXYocCk7CgogICAgICAgIHBpdiA9ICgocCArIHIpIC8gMik7IC8vIGRvZXNuJ3Qgd29yawoKICAgICAgICBxID0gcGFydGl0aW9uKGFyciwgcCwgciwgcGl2KTsKCiAgICAgICAgcXVpY2tTb3J0KGFyciwgcCwgcSAtIDEpOyAvL1NvcnQgbGVmdCBoYWxmCiAgICAgICAgcXVpY2tTb3J0KGFyciwgcSArIDEsIHIpOyAvL1NvcnQgcmlnaHQgaGFsZgogICAgfQp9CgppbnQgbWFpbigpCnsKCXZlY3RvcjxpbnQ+IEEoMTApOwogICAgZm9yKGludCBpPTA7IGkgPCAxMDsgKytpKQogICAgCUFbaV0gPSAxMCAtIGk7CgogICAgcXVpY2tTb3J0KEEsIDAsIDkpOwoJcHJpbnRWZWN0b3IoQSk7Cn0=