Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Kougami en 17 Febrero 2018, 18:39 PM

Título: No encuentro el error en este codigo para ordenar
Publicado por: Kougami en 17 Febrero 2018, 18:39 PM
Buenas,

Tengo hecho este codigo para ordenar un array usando el campo key que es un int, pero no me lo ordena del todo bien y no se donde esta el error, me podrian ayudar?


#include <stdio.h>

typedef struct {
char data[4096];
int key;
} item;

item array[] = {
{"Juan", 3},
{"Pedro", 4},
{"Victor", 2},
{"Antonio", 5},
{"Alejandro", 1},
};

void sort(item *a, int n) {
int i = 0, j = 0;
int s = 1;
item* p;
for(; i < n & s != 0; i++) {
s = 0;
p = a;
j = n-1;
do {
if( p->key > (p+1)->key) {
item t = *p;
*p = *(p+1);
*(p+1) = t;
s++;
}
} while ( --j >= 0 );
}
}

int main() {
int i;
sort(array,5);
for(i = 0; i < 5; i++){
printf("Array[%d] = { %s, %d}\n", i, array[i].data, array[i].key);
}
return 0;
}


Muchas gracias de antemano
Título: Re: No encuentro el error en este codigo para ordenar
Publicado por: MAFUS en 17 Febrero 2018, 19:06 PM
A simple vista he visto que:
Línea 20 has puesto & cuando el AND lógico es &&.
Título: Re: No encuentro el error en este codigo para ordenar
Publicado por: Kougami en 17 Febrero 2018, 19:09 PM
Tanto con el && como solo con el & la salida sigue siendo la misma
Título: Re: No encuentro el error en este codigo para ordenar
Publicado por: MAFUS en 17 Febrero 2018, 22:40 PM
Te cambio la función Sort por esta, bastante más sencilla:
void sort(item *a, int n) {
   int i, j;
   for(i=0; i<n-1; ++i) {
       for(j=i+1; j<n; ++j) {
           if(a[i].key > a[j].key) {
               item t = a[i];
               a[i] = a[j];
               a[j] = t;
           }
       }
   }
}