#include <iostream>
using namespace std;
void quicksort(int[],int, int);
int partition(int[], int, int);
int main()
{
int a[] = {5, 1, 9, 3, 8, 4, 1, 2, 6, 7};
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
cout << endl;
quicksort(a, 0, 9);
for (int i = 0; i < 10; i++)
{
cout << a[i] << " ";
}
return 0;
}
void quicksort(int a[], int p, int r)
{
if (p < r)
{
int q = partition(a, p, r);
quicksort(a, p, q - 1);
quicksort(a, q + 1, r);
}
}
int partition(int a[], int p, int r)
{
int x = a[r];
int i = (p - 1);
for (int j = p; j <= r-1; j++)
{
if (a[j] <= x)
{
i++;
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
int tmp = a[i+1];
a[i+1] = a[r];
a[r] = tmp;
return (i + 1);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBxdWlja3NvcnQoaW50W10saW50LCBpbnQpOwppbnQgcGFydGl0aW9uKGludFtdLCBpbnQsIGludCk7CgppbnQgbWFpbigpCnsKICAgIGludCBhW10gPSB7NSwgMSwgOSwgMywgOCwgNCwgMSwgMiwgNiwgN307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCiAgICB7IAogICAgICAgIGNvdXQgPDwgYVtpXSA8PCAiICI7CiAgICB9CiAgICBjb3V0IDw8IGVuZGw7CiAgICBxdWlja3NvcnQoYSwgMCwgOSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspCiAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgYVtpXSA8PCAiICI7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBxdWlja3NvcnQoaW50IGFbXSwgaW50IHAsIGludCByKQp7CiAgICBpZiAocCA8IHIpCiAgICB7CiAgICAgICAgICAgIGludCBxID0gcGFydGl0aW9uKGEsIHAsIHIpOwogICAgICAgICAgICBxdWlja3NvcnQoYSwgcCwgcSAtIDEpOwogICAgICAgICAgICBxdWlja3NvcnQoYSwgcSArIDEsIHIpOwogICB9Cn0KCmludCBwYXJ0aXRpb24oaW50IGFbXSwgaW50IHAsIGludCByKQp7CiAgICBpbnQgeCA9IGFbcl07CiAgICBpbnQgaSA9IChwIC0gMSk7CiAgICBmb3IgKGludCBqID0gcDsgaiA8PSByLTE7IGorKykKICAgIHsKICAgICAgICBpZiAoYVtqXSA8PSB4KQogICAgICAgIHsKICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgIGludCB0bXAgPSBhW2ldOwogICAgICAgICAgICAgICAgYVtpXSA9IGFbal07CiAgICAgICAgICAgICAgICBhW2pdID0gdG1wOwogICAgICAgIH0KICAgICB9CiAgICAgaW50IHRtcCA9IGFbaSsxXTsKICAgICBhW2krMV0gPSBhW3JdOwogICAgIGFbcl0gPSB0bXA7CiAgICAgcmV0dXJuIChpICsgMSk7Cn0=