#include <iostream>
using namespace std;
void print_r(int *a, int length)
{
for (int i = 0; i < length; ++i)
cout << a[i] << ' ';
cout << endl;
}
void q_sort(int *a, int length)
{
if (length == 1) {
return ;
}
if (length == 2) {
if (a[0] > a[1])
swap(a[0], a[1]);
return ;
}
int *divide = a + length - 1;
int *less = a;
int *greater = a + length - 2;
while (less < a + length && greater >= a) {
if (less < greater && *less <= *divide) {
++less;
} else if (greater > less && *greater > *divide) {
--greater;
} else {
swap(*less, *greater);
}
if (less == greater) {
if (*less <= *divide) {
swap(*(less + 1), *divide);
} else {
swap(*less, *divide);
}
break;
}
}
q_sort(a, less - a + 1);
q_sort(less + 1, length - (less - a) - 1);
}
int main()
{
int a[13] = {1, 3, 2, 0, 4, 6, 8, 7, 9, 5, 13, 10, 9};
q_sort(a, 13);
print_r(a, 13);
}