¿Cómo funciona la siguiente función de comparación en c ++?

bool comp(int a,int b){

    if ((a > 0 && b > 0) || (a < 0 && b < 0))
        return false;

    if ((a > 0) && (b < 0))
        return false;
}

Para una matriz dada, que contiene enteros positivos y negativos, la función anterior es útil para reorganizar la matriz de modo que, los enteros negativos seguidos de los enteros positivos y conserva el orden de los elementos.

Ejemplo

int arr [] = {1,2,-3,-1}, n=sizeof(arr)/sizeof(int);

sort(arr,arr+n, comp);

output : {-3,-1,1,2}

Pero no puedo entender cómo funciona, ¿podría alguien explicarme?

Respuestas a la pregunta(2)

Su respuesta a la pregunta