Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    684

    Ciclo for per ordinamento numeri

    Ciao a tutti,
    qualcuno sa spiegarmi in questo semplice programmino il perchè debba scrivere duce cicli for per poter visualizzare i numeri dell'array in ordine crescente?? (Se tolgo il ciclo for con int pass=0 i numeri non sono + visualizzati in ordine crescente fino alla fine):

    #include <iostream>
    #include <iomanip>

    using namespace std;

    int main()
    {

    const int arraysize=10;
    int a[arraysize]={2,6,4,8,10,12,89,68,45,37};
    int i,hold;

    cout << "Data items in original order\n";

    for (i=0; i<arraysize; i++)
    cout << setw(4) << a[i];

    //passaggi
    for(int pass=0; pass<arraysize-1; pass++)

    //un passaggio
    for(i=0; i<arraysize-1; i++)

    if(a[i]>a[i+1]){ //un confronto
    hold=a[i];
    a[i]=a[i+1];
    a[i+1]=hold;
    }

    cout << "\nData items in ascending order\n";

    for(i=0; i<arraysize; i++)
    cout << setw(4) << a[i];

    cout << endl;

    system("PAUSE");
    return 0;
    }



    Grazie


  2. #2
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il modo migliore per capirlo è provare ad eseguire il programma a mano con carta e penna simulando tutti i passi eseguiti in ogni iterazione dei due for. Il corpo dell'if serve ad effettuare uno scambio tra l'elemento i-esimo e quello successivo, in questo modo, se l'elemento i-esimo è minore del successivo, va a spostarsi in una posizione di indice minore; nel caso peggiore un elemento che si trova in ultima posizione dovrà spostarsi dall'ultima posizione alla prima, con n -1 scambi successivi. Quindi ci vuole un primo for; il secondo for interno è quello che ad ogni iterazione effettua uno scambio pr ogni coppia di elementi contigui.


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  3. #3
    Si tratta del semplice (quanto poco efficiente) algoritmo del BubbleSort,così chiamato perchè esegue una serie di scansioni ripetute dell'array da ordinare facendo via via scendere i numeri più piccoli verso l'inizio dell'array (proprio come delle bolle che vengono a galla,da cui Bubble) e ottenendo alla fine un array ordinato in ordine crescente (o decrescente se vcambi il verso nel confronto).Come ti è stato giustamente suggerito il modo migliore per capire come funziona è disegnarti una array (magari piccolo) su carta con sopra gli indici e provare ad eseguirlo a mano.

    Piccolo suggerimento:metti i tag
    codice:
    ...
    la prox volta
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    684
    Grazie della spiegazione ragazzi.

    x unomichisiada: cosa intendi per "Metti i tag"?? :master:

    Grazie ancora

  5. #5
    Originariamente inviato da Mr_Flash
    Grazie della spiegazione ragazzi.

    x unomichisiada: cosa intendi per "Metti i tag"?? :master:

    Grazie ancora
    vuol dire prova a leggere il regolamento anche per i titoli
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    684
    Ops..
    scusate tanto.

    Ciao e grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.