#include <algorithm>
#include <iostream>

// un predicado de ordenamiento debe responder la siguiente pregunta: ¿a debe aparecer antes que b?

bool predicado_ascendente(int a, int b) {
   return (a < b);                    // verdadero si a es menor que b, falso en otro caso
}

bool predicado_descendente(int a, int b) {
   return (a > b);                    // verdadero si a es mayor que b, falso en otro caso
}

int main( ) {
   int arr[10] = { 3, 1, 4, 6, 2, 8, 5, 9, 0, 7 };

   std::sort(&arr[0], &arr[10], predicado_ascendente);
   for (int i = 0; i < 10; ++i) {
      std::cout << arr[i] << " ";
   }
   std::cout << "\n";

   std::sort(&arr[0], &arr[10], predicado_descendente);
   for (int i = 0; i < 10; ++i) {
      std::cout << arr[i] << " ";
   }
   std::cout << "\n";
}
