Quick sort en C con estructuras
Publicado por Benito (1 intervención) el 22/11/2019 11:23:14
Buenas!
Necesito una pequeña ayuda con esto que se me ha atacado.
Tengo que ordenar un array de estructuras con Quick Short.
Este es mi codigo:
Estructura:
Swap:
Partir:
Quick Short:
Y así llamo al a función:
tIntoxicacion *pDatos;
QuickSort(&pDatos, 0, NumLineas-1, 7);
Los datos son los leidos desde un excel.
Necesito una pequeña ayuda con esto que se me ha atacado.
Tengo que ordenar un array de estructuras con Quick Short.
Este es mi codigo:
Estructura:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef enum {FALSE, TRUE} tBoolean;
typedef char tCiudad [MAX_CIUDAD];
typedef char tRegion [MAX_REGION];
typedef char tFecha [MAX_FECHA];
typedef char tTipoIntox [MAX_INTOXICACION];
typedef struct {
int Registro;
tCiudad Ciudad;
tRegion Region;
tTipoIntox TipoIntox;
tFecha FechaIni;
tFecha FechaFin;
int NumAfectados;
int NumMuertos;
int NumCronicos;
} tIntoxicacion;
Swap:
1
2
3
4
5
6
void swap(tIntoxicacion* a, tIntoxicacion* b)
{
tIntoxicacion t = *a;
*a = *b;
*b = t;
}
Partir:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
int Partir (tIntoxicacion **p, int primero, int ultimo, int TipoOrd)
{
if(TipoOrd == 6)//Ordena por nº de afectados
{
int pivot = (*p)[primero].NumAfectados;
int i = (ultimo - 1);
for (int j = ultimo; j <= primero- 1; j++)
{
if ((*p)[j].NumAfectados <= pivot)
{
i++;
swap(&(*p)[i], &(*p)[j]);
}
}
swap(&(*p)[i + 1], &(*p)[primero]);
return (i + 1);
}
else if(TipoOrd == 7)//ordena por nº de muertos
{
int pivot = (*p)[primero].NumMuertos;
int i = (ultimo - 1);
for (int j = ultimo; j <= primero- 1; j++)
{
if ((*p)[j].NumMuertos <= pivot)
{
i++;
swap(&(*p)[i], &(*p)[j]);
}
}
swap(&(*p)[i + 1], &(*p)[primero]);
return (i + 1);
}
else
{
int pivot = (*p)[primero].NumCronicos;
int i = (ultimo - 1);
for (int j = ultimo; j <= primero- 1; j++)
{
if ((*p)[j].NumCronicos <= pivot)
{
i++;
swap(&(*p)[i], &(*p)[j]);
}
}
swap(&(*p)[i + 1], &(*p)[primero]);
return (i + 1);
}
}
1
2
3
4
5
6
7
8
9
void QuickSort (tIntoxicacion **p, int izda, int dcha, int TipoOrd)
{
if (dcha < izda)
{
int pi = Partir((*p), dcha, izda, TipoOrd);
QuickSort((*p), dcha, pi - 1, TipoOrd);
QuickSort((*p), pi + 1, izda, TipoOrd);
}
}
Y así llamo al a función:
tIntoxicacion *pDatos;
QuickSort(&pDatos, 0, NumLineas-1, 7);
Los datos son los leidos desde un excel.
Valora esta pregunta


0