Si tienes que buscar el mayor de un array de enteros, es simple:
int BuscaMayor(int *array, int size){
int mayor = array[0];
for(int i = 1; i < size; i++)
if(array[i] > mayor)
mayor = array[i]
return mayor;
}
Pero esto es porque para saber si un número es mayor que otro basta con el operador ">". Sin embargo cuando comparas estructuras tú decides que campo indica que objeto es mayor que otro. Entonces ya no sirve usar el operador ">", tienes que usar una función que haga lo mismo que ese operador, es decir, que de dos objetos te diga cual es mayor.
Imagina un stuct de persona, con nombre y edad:
struct Persona{
string nombre;
int edad;
int dni;
};
Nosotros decidimos cuando una persona es mayor que otra, lo más lógico es con la edad, entonces hacemos una función que reciba dos personas y devuelva un entero positivo (1) si el primero es mayor, un entero negativo (-1) si el primero es menor y un 0 si son iguales...
int compararPorEdad(Persona p1, Persona p2){
int comparacion = 0;
if(p1.edad > p2.edad)
comparacion = 1;
else if(p1.edad < p2.edad)
comparacion = -1;
return comparacion;
}
Entonces ahora para buscar el mayor de un array de personas sería algo así:
Persona mayorPersona(Persona *personas, int size){
Persona mayor = personas[0];
for(int i = 1; i < size; i++)
if(compararPersonas(personas[i], mayor) == 1)
mayor = personas[i];
return mayor;
}
Aquí en vez de usar el operador ">" hemos tenido que usar la función que hemos creado porque si usas el operador ">" con dos estructuras, el programa no sabe cual es mayor (a no ser que sobrecargues ese operador, que eso lo estudiarás más adelante).
Entonces si tienes más de un criterio de ordenación, por ejemplo quieres que el mayor sea e que tiene el DNI más alto. Entonces tendrías una función como <int compararPorEdad(Persona p1, Persona p2)> pero que será <int compararPorDni(Persona p1, Persona p2)>.
El objetivo es que puedas usar la función <Persona personaMayor(Persona *personas, int size)> con el criterio que quieras. Entonces ese criterio lo pasas como tercer parámetro, pasas la función que compara.
Persona personaMayor(Persona *personas, int size, int (*comparacion)(Persona p1, Persona p2));
Y usas la función <int comparacion(Persona p1, Persona p2)> para comparar cada dos personas del array. Suerte