Ordinare due array in un terzo

di il
8 risposte

Ordinare due array in un terzo

Ciao a tutti,
il mio quesito è il seguente: se ho due array A [6] = {2,4,7,7,8,9} e b [6] = {2,3,4,6,9,10} e volessi riempire un terzo vettore C [12] in modo che il suo risultato finale, a seguito di un printf sia: 2 2 3 4 4 6 7 7 8 9 9 10 ma non potessi prima riempire il vettore C con tutti i valori e poi riordinarli ma trovare un algoritmo che interagendo con A e B riempia C direttamente nell'ordine giusto come dovrei fare? Esiste un algoritmo tipico per questi tipo di problemi?
Grazie

8 Risposte

  • Re: Ordinare due array in un terzo

    Devi effettuare la

    fusione di due array ordinati

    (merge two sorted arrays)
  • Re: Ordinare due array in un terzo

    oregon ha scritto:


    Devi effettuare la

    fusione di due array ordinati

    (merge two sorted arrays)
    ho trovato online questo codice ma sinceramente mi sembra che non riesca a gestire tutto..

    void merge( int A[], int na, int B[], int nb, int C[]){
    int i,j,k;
    i=j=k=0;
    while (i<na && j<nb)
    if (A<B[j])
    C[k++]=A[i++];
    else
    C[k++]=B[j++];
    while (i<na)
    C[k++]=A[i++];
    while (j<nb)
    C[k++]=B[j++];
    }

    Che ne dici?
    Ho provato ..mi riscrive semplicemente il valore del secondo vettore nel terzo..
  • Re: Ordinare due array in un terzo

    Controlla bene i parametri che passi alla funzione, forse non hai settato correttamente na.
    Ti consiglio di inserire delle printf() all'interno del ciclo while in modo da capire come si modificano i, j e k (e magari stampa anche A,B[j] e C[k])
  • Re: Ordinare due array in un terzo

    Premesso che li ci sono solo valori positivi io creerei un array di interi inizializzato a 0 e scandirei i 2 array andando ad incrementare l'iesimo elemento dell'array di supporto ogni volta .
    Alla fine scandisci l'array di supporto e man mano che trovi un iesimo elemento che sia maggiore di 0 inserisci nel tuo vettore c l'indice corrispondente e decrementi il valore dell'elemento in posizione iesima del tuo array di supporto ...
    In questo modo la complessità è quasi lineare .
    I vincoli di questo algoritmo sono :
    1-devi sapere a priori che non avrai mai numeri negativi
    2-devi creare un array grande e devi sapere di non sforarlo
    3-sai che se dovessi avere 50 elementi che hanno valore 0 il fatto di creare un array di 1000 elementi è un po uno spreco diciamo (per essere raffinati)


    In pratica è più difficile spiegarlo che farlo
    Se non sbaglio questo algoritmo si chiama integer sort
    È carino da fare come esercizio ma non credo sia molto funzionale dal punto di vista pratico .
  • Re: Ordinare due array in un terzo

    Scusate, ma la "soluzione" prospettata è quella di ravanare e scopiazzare da internet un pezzetto di codice, che non si sa neppure bene come valutare?
    cosa si impara da una metodica del genere? niente.

    la mia è solo un'annotazione, non polemica, relativa al "piccolo" particolare che questo è un ottimo modo per rimanere a zero come livello generale
  • Re: Ordinare due array in un terzo

    E' la differenza che passa tra vedere come fanno gli altri per capire perché han fatto così (arma potentissima d'apprendimento) e fare dei copia-e-incolla in modo acritico (modo per risparmiare tempo da impiegare spippolando ancora un po' col cellulare). Oggi come oggi il copia-e-incolla è diventato l'idolo di tutti coloro che, in definitiva, non vogliono capire perché non danno valore all'apprendere. E dico questo indipendentemente dal caso specifico.
  • Re: Ordinare due array in un terzo

    Vedere... cosa? arma direi pressochè nulla di apprendimento, soprattutto se relativa a non si sa chi.
    un conto è osservare una "vera" soluzione, cioè di un professionista, tutt'altro lurkare qualche programmello scritto da bimbiminkia o assimilabili.

    e, in ogni caso, l'effetto didattico è minimo, rispetto a risolvere da soli, con la propria testa, anche con tentativi e miglioramenti.
  • Re: Ordinare due array in un terzo

    Son curioso di vederla, la soluzione da professionista. Avrei l'opportunità di imparare qualcosa, fosse anche solo l'acquisizione di un maggior livello di consapevolezza in merito ai miei limiti.
Devi accedere o registrarti per scrivere nel forum
8 risposte