#include <algorithm>
#include <iostream>

int* particion(int* ini, int* fin, int v) {
   int* q = ini;
   for (int* p = ini; p < fin; ++p) {
      if (*p < v) {
         std::swap(*p, *q++);
      }
   }
   return q;
}

void quick_sort(int* ini, int* fin) {
   if (fin - ini >= 2) {
      int* q = particion(ini, fin - 1, *(fin - 1));
      std::swap(*q, *(fin - 1));
      quick_sort(ini, q);
      quick_sort(q + 1, fin);
   }
}

int main( ) {
   int arr[10] = { 2, 6, 0, 9, 5, 3, 8, 1, 4, 7 };
   quick_sort(&arr[0], &arr[10]);
   for (int i = 0; i < 10; ++i) {
      std::cout << arr[i] << " ";
   }
}
