#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
std::vector<int> quick_sort(const std::vector<int> &data)
{
if (data.empty())
return std::vector<int>();
std::vector<int> left;
left.reserve(data.size());
std::vector<int> right;
right.reserve(data.size());
int x = data[0];
std::partition_copy(data.begin() + 1, data.end(), std::back_inserter(left), std::back_inserter(right), [x](int y){return y < x;});
std::vector<int> result;
auto sl = quick_sort(left);
auto sr = quick_sort(right);
result.insert(result.end(), sl.begin(), sl.end());
result.push_back(x);
result.insert(result.end(), sr.begin(), sr.end());
return result;
}
std::vector<int> quick_sort(const std::initializer_list<int> &in)
{
std::vector<int> data(in);
return quick_sort(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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0ZDo6dmVjdG9yPGludD4gcXVpY2tfc29ydChjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+ICZkYXRhKQp7CglpZiAoZGF0YS5lbXB0eSgpKQoJCXJldHVybiBzdGQ6OnZlY3RvcjxpbnQ+KCk7CgkJCglzdGQ6OnZlY3RvcjxpbnQ+IGxlZnQ7CglsZWZ0LnJlc2VydmUoZGF0YS5zaXplKCkpOwoJc3RkOjp2ZWN0b3I8aW50PiByaWdodDsKCXJpZ2h0LnJlc2VydmUoZGF0YS5zaXplKCkpOwoJaW50IHggPSBkYXRhWzBdOwoKCXN0ZDo6cGFydGl0aW9uX2NvcHkoZGF0YS5iZWdpbigpICsgMSwgZGF0YS5lbmQoKSwgc3RkOjpiYWNrX2luc2VydGVyKGxlZnQpLCBzdGQ6OmJhY2tfaW5zZXJ0ZXIocmlnaHQpLCBbeF0oaW50IHkpe3JldHVybiB5IDwgeDt9KTsKCglzdGQ6OnZlY3RvcjxpbnQ+IHJlc3VsdDsKCWF1dG8gc2wgPSBxdWlja19zb3J0KGxlZnQpOwoJYXV0byBzciA9IHF1aWNrX3NvcnQocmlnaHQpOwoJcmVzdWx0Lmluc2VydChyZXN1bHQuZW5kKCksIHNsLmJlZ2luKCksIHNsLmVuZCgpKTsKCXJlc3VsdC5wdXNoX2JhY2soeCk7CglyZXN1bHQuaW5zZXJ0KHJlc3VsdC5lbmQoKSwgc3IuYmVnaW4oKSwgc3IuZW5kKCkpOwoJcmV0dXJuIHJlc3VsdDsKfQoKc3RkOjp2ZWN0b3I8aW50PiBxdWlja19zb3J0KGNvbnN0IHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxpbnQ+ICZpbikKewoJc3RkOjp2ZWN0b3I8aW50PiBkYXRhKGluKTsKCXJldHVybiBxdWlja19zb3J0KGRhdGEpOwp9CgppbnQgbWFpbigpIHsKCQoJYXV0byByZXMgPSBxdWlja19zb3J0KHsxMCwgOSwgNywgOCwgNSwgNiwgNCwgNywgMiwgMX0pOwoJZm9yIChpbnQgaSA6IHJlcykKCQlzdGQ6OmNvdXQgPDwgaSA8PCAnICc7CgkJCglzdGQ6OmNvdXQgPDwgZW5kbDsKCQoJcmV0dXJuIDA7Cn0=