#include <algorithm>
#include <iostream>

// queremos colocar primero los pares de menor a mayor, y después los impares de mayor a menor
// el predicado debe responder: ¿a debe aparecer antes que b?

bool predicado(int a, int b) {
   if (a % 2 == 0 && b % 2 == 0) {
      return (a < b);
   } else if (a % 2 == 0 && b % 2 == 1) {
      return true;
   } else if (a % 2 == 1 && b % 2 == 0) {
      return false;
   } else if (a % 2 == 1 && b % 2 == 1) {
      return (a > b);
   }
}

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