necesito ordenar por genero, todos los femeninos primero, despues todos los femeninos con mayor handicap llegando al menor, luegos los masculinos con mayor handicap hasta llegar al menor pr ultimo. este es mi codigo pero no lo ordena de la forma que quiero.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct jugador {
char nombre [20];
char sexo;
int handicap;
};
void carga( struct jugador[], int );
void mirar( struct jugador[], int );
void ordenar ( struct jugador[], int );
#define N 4
#define largo 20
int main(){
struct jugador vec[N];
carga (vec, N);
ordenar ( vec, N );
mirar ( vec, N );
}
void mirar (struct jugador v[], int n)
{
int i;
printf ("NOMBRE\t SEXO\t HANDICAP\t\n");
for(i=0;i<n;i++)
{
printf ("%s\t %c \t %d \n", v[i].nombre , v[i].sexo , v[i].handicap);
}
}
void carga (struct jugador v[], int n)
{
int i;
for (i=0;i<n;i++){
printf ("\n\tingrese nombre del jugador : ");
fflush (stdin);
gets(v[i].nombre);
printf ("\n\tingrese sexo del jugador : ");
v[i].sexo = getchar();
printf ("\n\tingrese handicap del jugador : ");
scanf ("%d", &v[i].handicap);
}
}
void ordenar ( struct jugador v[], int n ){
int i, j;
struct jugador aux;
for ( i = 0 ; i < n-1 ; i++ )
for ( j = 0 ; j < n-i-1 ; j++ )
if( (v[j].sexo == 'f') && v[j].handicap > v[j+1].handicap ){
aux = v[j];
v[j] = v[j+1];
v[j+1] = aux;
}
}[code=c][code=c]
[/code][/code]
y si esta condicion
if( (v[j].sexo == 'f') && v[j].handicap > v[j+1].handicap ){
la cambias por
if(( (v[j].sexo == 'f') && v[j+1].sexo == 'm')) ||
((v[j].sexo == v[j+1].sexo) && v[j].handicap > v[j+1].handicap) ){
Cambia algo?