Ordinare due array in un terzo

di Anonimizzato21872 il
8 risposte
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

  • Devi effettuare la

    fusione di due array ordinati

    (merge two sorted arrays)
  • 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..
  • 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])
  • 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 .
  • 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
  • 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.
  • 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.
  • 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