#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <list>
using namespace std;
void qsort(list<int>::iterator first, list<int>::iterator last)
{
if (distance(first, last) < 2)
return;
int pivot = *first;
list<int>::iterator it = partition(first, last, bind2nd(less<int>(), pivot));
qsort(first, it);
qsort(it, last);
}
int main()
{
std::list<int> l;
l.push_back(5);
l.push_back(4);
l.push_back(1);
l.push_back(10);
l.push_back(3);
l.push_back(6);
l.push_back(7);
cout << "List:";
copy(l.begin(), l.end(), std::ostream_iterator<int>(std::cout, " "));
cout << endl;
qsort(l.begin(), l.end());
cout << "Sorted list:";
copy(l.begin(), l.end(), std::ostream_iterator<int>(std::cout, " "));
cout << endl;
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8bGlzdD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHFzb3J0KGxpc3Q8aW50Pjo6aXRlcmF0b3IgZmlyc3QsIGxpc3Q8aW50Pjo6aXRlcmF0b3IgbGFzdCkKewogICAgaWYgKGRpc3RhbmNlKGZpcnN0LCBsYXN0KSA8IDIpCiAgICAgICAgcmV0dXJuOwogICAgaW50IHBpdm90ID0gKmZpcnN0OwoKICAgIGxpc3Q8aW50Pjo6aXRlcmF0b3IgaXQgPSBwYXJ0aXRpb24oZmlyc3QsIGxhc3QsIGJpbmQybmQobGVzczxpbnQ+KCksIHBpdm90KSk7CgogICAgcXNvcnQoZmlyc3QsIGl0KTsKICAgIHFzb3J0KGl0LCBsYXN0KTsKfQoKaW50IG1haW4oKQp7CiAgICBzdGQ6Omxpc3Q8aW50PiBsOwogICAgbC5wdXNoX2JhY2soNSk7CiAgICBsLnB1c2hfYmFjayg0KTsKICAgIGwucHVzaF9iYWNrKDEpOwogICAgbC5wdXNoX2JhY2soMTApOwogICAgbC5wdXNoX2JhY2soMyk7CiAgICBsLnB1c2hfYmFjayg2KTsKICAgIGwucHVzaF9iYWNrKDcpOwoKICAgIGNvdXQgPDwgIkxpc3Q6IjsKICAgIGNvcHkobC5iZWdpbigpLCBsLmVuZCgpLCBzdGQ6Om9zdHJlYW1faXRlcmF0b3I8aW50PihzdGQ6OmNvdXQsICIgIikpOwogICAgY291dCA8PCBlbmRsOwogCiAgICBxc29ydChsLmJlZ2luKCksIGwuZW5kKCkpOwoKICAgIGNvdXQgPDwgIlNvcnRlZCBsaXN0OiI7CiAgICBjb3B5KGwuYmVnaW4oKSwgbC5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGludD4oc3RkOjpjb3V0LCAiICIpKTsKICAgIGNvdXQgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9