Foro de elhacker.net

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?

Código
  1. #include <stdio.h>
  2.  
  3. typedef struct {
  4. char data[4096];
  5. int key;
  6. } item;
  7.  
  8. item array[] = {
  9. {"Juan", 3},
  10. {"Pedro", 4},
  11. {"Victor", 2},
  12. {"Antonio", 5},
  13. {"Alejandro", 1},
  14. };
  15.  
  16. void sort(item *a, int n) {
  17. int i = 0, j = 0;
  18. int s = 1;
  19. item* p;
  20. for(; i < n & s != 0; i++) {
  21. s = 0;
  22. p = a;
  23. j = n-1;
  24. do {
  25. if( p->key > (p+1)->key) {
  26. item t = *p;
  27. *p = *(p+1);
  28. *(p+1) = t;
  29. s++;
  30. }
  31. } while ( --j >= 0 );
  32. }
  33. }
  34.  
  35. int main() {
  36. int i;
  37. sort(array,5);
  38. for(i = 0; i < 5; i++){
  39. printf("Array[%d] = { %s, %d}\n", i, array[i].data, array[i].key);
  40. }
  41. return 0;
  42. }
  43.  

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:
Código
  1. void sort(item *a, int n) {
  2.    int i, j;
  3.    for(i=0; i<n-1; ++i) {
  4.        for(j=i+1; j<n; ++j) {
  5.            if(a[i].key > a[j].key) {
  6.                item t = a[i];
  7.                a[i] = a[j];
  8.                a[j] = t;
  9.            }
  10.        }
  11.    }
  12. }