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
A simple vista he visto que:
Línea 20 has puesto & cuando el AND lógico es &&.
Tanto con el && como solo con el & la salida sigue siendo la misma
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;
}
}
}
}