No encuentro el error en este codigo para ordenar

Iniciado por Kougami, 17 Febrero 2018, 18:39 PM

0 Miembros y 2 Visitantes están viendo este tema.

Kougami

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

MAFUS

A simple vista he visto que:
Línea 20 has puesto & cuando el AND lógico es &&.

Kougami

Tanto con el && como solo con el & la salida sigue siendo la misma

MAFUS

#3
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;
           }
       }
   }
}