Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Bouble Sort fatto bene??

    Salve stavo programmando in devC++ , mi sto preparando per un esame.
    Potreste dare uno sguardo a questo programma??
    Viene eseguito ma mi da dei valori assurdi alla fine
    Ecco il testo:
    Siano assegnati in ingresso, da tastiera, due vettori di interi V1 ed V2, ed i loro riempimenti n1 ed n2. Si supponga che gli elementi del vettore V1 siano ordinati in senso crescente.Si scriva un programma che inserisca in ordine nel vettore V1 tutti gli elementi del vettore V2. Si stampi quindi il vettore V1 modificato.Il programma deve essere articolato in funzioni (ad es.: input, output, inserisci).Suggerimento: la funzione inserisci riceve in ingresso n1, V1, n2 e V2 e modifica il vettore V1 ed il suo riempimento.EsempioINPUT: n1 = 7 V1 = 1 4 7 9 12 15 22 n2 = 4 V2 = 14 3 5 25OUTPUT: V1 = 1 3 4 5 7 9 12 14 15 22 25


    Ed ecco il programma da me svolto:
    */#include<iostream>
    #include<stdlib.h>
    using namespace std;
    void input(int v[], int n);
    void copia(int v[], int w[], int n);
    void inserisci(int w[], int s);
    void output(int v[], int s);
    int main()
    { int n1,v1[50];
    int n2,v2[50];
    input(v1,n1);
    cout<<"inserisci riempimento al vettore 2"<<endl;
    cin>>n2;
    cout<<"inserisci "<<n2<<" elementi al vettore 2"<<endl;
    for(int i=0; i<n2; i++)
    cin>>v2[i]; int v3[100];
    copia(v1,v3,n1);
    copia(v2,v3,n2);
    int s=n1+n2;
    inserisci(v3,s);
    output(v3,s);
    system("PAUSE");
    return 0 ;
    }
    void input(int v[], int n){ cout<<"inserisci riempimento al vettore 1 "<<endl;
    cin>>n;
    cout<<"inserisci in modo ordinato crescente "<<n<<" elementi al vettore 1"<<endl;
    for(int i=0;i<n;i++)
    cin>>v[i];
    }
    void copia(int v[],int w[], int n){
    for(int i=0;i<n;i++)
    w[i]=v[i]; }
    void inserisci(int w[], int s){
    int i=0;
    bool scambiato= false;
    while((i<s-1)&& scambiato){
    scambiato=false;
    for(int j=s;j>i;j--){
    if(w[j]<w[j-1]){
    swap(w[j],w[j-1]);
    scambiato=true; i++;}
    }
    }
    }
    void output(int w[], int s){
    cout<<"il vettore ordinato sarà"<<endl;
    for (int m=0; m<s; m++)
    cout<<w[m];

    nella fnzione copia ho cercato di copiare ogni elemento dei due vettori in un altro vettore , per poi (in inserisci) ordinanrlo tramite il bouble sort.
    Penso che l'errore sia nello svolgimento di quest'ultimo , qualcuno mi potrebbe aiutare per favore????

    Grazie =)

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    39
    no il problema è che in copia tu inizi sempre a copiare da 0;
    quindi esegui
    codice:
    copia(v1,v3,n1)
    e copi gli elementi di v1 in v3 a partire da 0
    e poi con
    codice:
    copia(v2,v3,n2)
    gli ricopi sopra gli elementi di v2

    in una situazione simile, se non devi per forza usare bubble sort, è decisamente meglio l'insertion sort, sia come efficienza che soprattutto come facilità di implementazione; anzi ti dirò che è sempre migliore perchè il bubble sort non è più efficace dell'insertion nel caso medio, mentre l'insertion sort è molto indicato quando si tratta di inserire elementi in un vettore già ordinato.
    Se vuoi migliori prestazioni, rivolgiti al merge sort(che può anche lui essere funzionale al tuo caso ordinando prima v2) o al quick sort (in c tra l'altro c'è la funzione qsort già definita, oppure ancor meglio la funzione sort del c++).

    Un'altra cosa. La consegna dice i parametri in ingresso di inserisci, che tu non rispetti; inoltre ti chiede di mettere gli elementi del vettore v2 in v1 , non in un terzo vettore v3. Possono sembrare cose irrilevanti ma sono fondamentali, secondo me, sia ad un esame che a livello professionale.

  3. #3
    Grazie per avermi risposto =)
    Ora mi informo sul del inserction sort.
    Comunque hai ragione sul fatto del vettore v3 ma , secondo me è un soluzione molto rapida e abbastanza intuitiva.
    Forse ho sbagliato in output che al posto di v3 bisogna stampare "il vettore v1 modificato è" e così in fase di esecuzione è più ordinato.
    Se non ti dispiace potresti indicarmi un altra via??
    Secondo me questa è la migliore , o forse conosco solo questa xD.
    Grazie ancora
    Arrivederci

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Come indicato nel Regolamento interno, il codice va postato indentato e all'interno degli appositi tag CODE previsti dal forum (vedi punto 6 del regolamento linkato).

    In questo post il codice non è nemmeno indentato, quindi non posso nemmeno aggiungere io i tag.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.