Sort a struct

0

Do you have some way to sort% of the form:

struct cidadecoord
{
  char cidade[90];
  int coordx, coordy;
}cidades[N];

N is worth 30 in the case, and I would like to order the coordinates x and y, to find out which cities were more to the east, west, north and south. I'm having trouble, because I do not know how to sort by keeping the city name information for each coordinate.

    
asked by anonymous 30.11.2014 / 19:18

2 answers

3

If the idea is just to get the cities to the north, south, east and west, you can do this:

int indNorte = 0;
int indSul = 0;
int indLeste = 0;
int indOeste = 0;

for(int i = 0; i < N; i++)
{
    if(cidades[indNorte].coordy < cidades[i].coordy) indNorte = i;
    if(cidades[indSul  ].coordy > cidades[i].coordy) indSul = i;
    if(cidades[indLeste].coordx < cidades[i].coordx) indLeste = i;
    if(cidades[indOeste].coordx > cidades[i].coordx) indOeste = i;
}
    
30.11.2014 / 19:48
1

Use the qsort() function of the standard library with your own sort function

int orderbyx(const void *a, const void *b) {
    const struct cidadecoord *aa = a;
    const struct cidadecoord *bb = b;
    return aa->coordx - bb->coordx;
}
int orderbyy(const void *a, const void *b) {
    const struct cidadecoord *aa = a;
    const struct cidadecoord *bb = b;
    return aa->coordy - bb->coordy;
}

/* ... */
qsort(cidades, N, sizeof *cidades, orderbyx);
/* cidades[0] tem a cidade com x menor */
/* cidades[N-1] tem a cidade com x maior */

/* ... */
qsort(cidades, N, sizeof *cidades, orderbyy);
/* cidades[0] tem a cidade com y menor */
/* cidades[N-1] tem a cidade com y maior */
    
30.11.2014 / 19:44