#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void quick_sort(std::vector<int>::iterator b, std::vector<int>::iterator e)
{
auto distance = e - b;
if (distance < 2)
return;
int x = *b;
auto p = std::partition(b, e, [x](int y){return y < x;});
if (p == b && *p == x)
quick_sort(b + 1, e);
else
{
quick_sort(b, p);
quick_sort(p, e);
}
}
std::vector<int> quick_sort(const std::initializer_list<int> &in)
{
std::vector<int> data(in);
quick_sort(data.begin(), data.end());
return data;
}
int main() {
auto res = quick_sort({10, 9, 7, 8, 5, 6, 4, 7, 2, 1});
for (int i : res)
std::cout << i << ' ';
std::cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgcXVpY2tfc29ydChzdGQ6OnZlY3RvcjxpbnQ+OjppdGVyYXRvciBiLCBzdGQ6OnZlY3RvcjxpbnQ+OjppdGVyYXRvciBlKQp7CglhdXRvIGRpc3RhbmNlID0gZSAtIGI7CglpZiAoZGlzdGFuY2UgPCAyKQoJCXJldHVybjsKCglpbnQgeCA9ICpiOwoJCglhdXRvIHAgPSBzdGQ6OnBhcnRpdGlvbihiLCBlLCBbeF0oaW50IHkpe3JldHVybiB5IDwgeDt9KTsKCglpZiAocCA9PSBiICYmICpwID09IHgpCgkJcXVpY2tfc29ydChiICsgMSwgZSk7CgllbHNlCgl7CgkJcXVpY2tfc29ydChiLCBwKTsKCQlxdWlja19zb3J0KHAsIGUpOwoJfQp9CgpzdGQ6OnZlY3RvcjxpbnQ+IHF1aWNrX3NvcnQoY29uc3Qgc3RkOjppbml0aWFsaXplcl9saXN0PGludD4gJmluKQp7CglzdGQ6OnZlY3RvcjxpbnQ+IGRhdGEoaW4pOwoJcXVpY2tfc29ydChkYXRhLmJlZ2luKCksIGRhdGEuZW5kKCkpOwoJCglyZXR1cm4gZGF0YTsKfQoKaW50IG1haW4oKSB7CgkKCWF1dG8gcmVzID0gcXVpY2tfc29ydCh7MTAsIDksIDcsIDgsIDUsIDYsIDQsIDcsIDIsIDF9KTsKCWZvciAoaW50IGkgOiByZXMpCgkJc3RkOjpjb3V0IDw8IGkgPDwgJyAnOwoJCQoJc3RkOjpjb3V0IDw8IGVuZGw7CgkKCXJldHVybiAwOwp9