Salve, sto studiando gli array in c tramite le lezioni del mio corso universitario e ho riscontrato un problema sull'algoritmo di fusione di due array ordinati.
Praticamente, durante la spiegazione, si fa riferimento ad un algoritmo che ordina due array e li fonde in un terzo array. Una volta scritto il codice però mi fa solo la fusione e non l'ordinamento. Vi posto il codice di conseguenza:
La function l'ho presa dalle slide del mio corso ho scritto solo il main, è un problema causato dalla mia copia della function o effettivamente questo algoritmo non ordina ma fonde soltanto? grazie in anticipo.
Praticamente, durante la spiegazione, si fa riferimento ad un algoritmo che ordina due array e li fonde in un terzo array. Una volta scritto il codice però mi fa solo la fusione e non l'ordinamento. Vi posto il codice di conseguenza:
C:
#include <stdio.h>
#include <stdlib.h>
void fusioneC (int a[], int size_a, int b[], int size_b, int c[]);
int main()
{
int a[50];
int b[50];
int c[50];
int size_a, size_b;
int ia, ib, ic;
printf ("Inserire il size del primo array: ");
scanf ("%d", &size_a);
printf ("Inserire il size del secondo array: ");
scanf ("%d", &size_b);
for (ia = 0; ia < size_a; ia++)
scanf ("%d", &a[ia]);
printf ("\n");
for (ib = 0; ib < size_b; ib++)
scanf ("%d", &b[ib]);
fusioneC (a, size_a, b, size_b, c);
return 0;
}
void fusioneC (int a[], int size_a, int b[], int size_b, int c[])
{
int i_a = 0;
int i_b = 0;
int i_c;
for (i_c = 0; i_c < size_a + size_b; i_c++)
{
if (i_a < size_a && i_b < size_b)
{
if (a[i_a] < b[i_b])
{
c[i_c] = a[i_a];
i_a++;
}
else
{
c[i_c] = b[i_b];
i_b++;
}
}
else if (i_b > size_b)
{
c[i_c] = a[i_a];
i_a++;
}
else
{
c[i_c] = b[i_b];
i_b++;
}
}
for (i_c = 0; i_c < size_a+size_b; i_c++)
printf ("%d", c[i_c]);
}
La function l'ho presa dalle slide del mio corso ho scritto solo il main, è un problema causato dalla mia copia della function o effettivamente questo algoritmo non ordina ma fonde soltanto? grazie in anticipo.
Ultima modifica da un moderatore: