PROBLEMA Fusione Di Due Array 1d Ordinati In C

Salvo9595

Nuovo Utente
4
0
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:

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:

rodhellas

Utente Èlite
1,521
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
L'algoritmo funziona se entrambi gli array di partenza sono ordinati. Quindi o li ordini prima, o ordini l'array finale. Comunque, facendo varie prove, ogni tanto stampa valori casuali
 
  • Like
Reactions: Eduadie

Eduadie

Utente Attivo
204
24
Nella fusione i due array devono essere obbligatoriamente ordinati altrimenti non può funzionare correttamente il tuo algoritmo.
Gli errori dei valori casuali sono dovuti all'errato size degli array in quanto a e b sono di size 50 (ed inoltre è possibile inserire un valore maggiore di questo) in più c (vettore finale) dovrebbe essere di 100 siccome è la somma degli altri due.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot: Sei vaccinato? [sondaggio anonimo]

  • Primo ciclo vaccinale completo (1-2 dosi)

    Voti: 125 69.8%
  • Fatta 1a dose, in attesa della 2a

    Voti: 19 10.6%
  • Sono prenotato per la 1a dose

    Voti: 8 4.5%
  • Non so se vaccinarmi

    Voti: 7 3.9%
  • Non ho intenzione di vacciarmi

    Voti: 20 11.2%
  • Fatta anche la terza dose

    Voti: 0 0.0%