Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031

    [C]Swap e manuali

    Topic curiosità: sto leggendo due manuali sulla programmazione e inevitabilmente arrivato al capitolo vettori mi ritrovo su entrambi i classici esempi riguardo ordinamento e ricerca. Fin qui nulla di strano, se non fosse che da un manuale pretenderei almeno che proponesse degli esempi ottimizzati... e invece non è per nulla così...

    codice:
    #include <stdio.h>
    #define SIZE 10
    int i, j;
    int *Ptr1, *Ptr2; 
    
    for (i=0; i<=SIZE;i++)
       for (j=0; j<SIZE;j++){
          if Vettore[j]>Vettore[j+1]{
             swap(&Vettore[j],&Vettore[j+1]);
          }   
       }
    
    void swap(int *Ptr1, int *Ptr2){
    int hold;
       hold=*Ptr1;
       *Ptr1=*Ptr2;
       *Ptr=*Ptr1;   
    }
    Non fate caso se ci sono degli errori, l'ho scritto velocemente...
    Nulla di strano direte voi, con 10 elementi E nella peggiore delle ipotesi, scorrendolo 10 volte (per i 10 elementi-1) lo si ordina sicuramente.
    Quello che voglio dire è che nella non peggiore delle ipotesi l'array si ordina anche con un passaggio

    E allora perchè non proporre un esempio come questo?

    codice:
    #include <stdio.h>
    #define SIZE 10
    int swap=1; 
    int j;
    int *Ptr1, *Ptr2; 
    
    while (swap!=0){
    swap=0;
       for (j=0; j<SIZE;j++){
          if Vettore[j]>Vettore[j+1]{
             swappa(&Vettore[j],&Vettore[j+1]);
             swap=1;
          }   
       }
    }
    
    void swappa(int *Ptr1, int *Ptr2){
    int hold;
       hold=*Ptr1;
       *Ptr1=*Ptr2;
       *Ptr=*Ptr1;   
    }
    Almeno in questo caso se basta un movimento per renderlo ordinato, il codice se la cava con una sola iterazione invece che doverne compiere magari 500... manuali

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    37
    Credo tu debba andarti a riguardare qualcosina...
    Vai su un qualunque sito universitario(Ingengeria informatica o forse anche solo informatica) e cerca un corso del tipo "Algoritmi e strutture dati".


  3. #3
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    eh?!?!?

  4. #4
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    Perchè non si pososno editare i propri post? che trovata assurda è? Ho notato un erroraccio nella swap

    ps: non mi interessano minimamente algoritmi di ordinamento avanzati (se era quello che volevi dirmi...), mi piacerebbe soltanto sapere se ad altri è capitato di trovare esempi mal ottimizzati... notare che sul secondo manuale (tutt'altro linguaggio fra l'altro) riportano l'esempio corretto.

  5. #5
    Il secondo algoritmo che hai proposto, nel caso pessimo, ha sempre una complessita' di n^2 (n = size), cosi' come la complessita' del primo algoritmo...

    L'unica differenza sta negli altri casi: ad es. caso ottimo -> array gia' ordinato: il II algoritmo entra una volta sola nel ciclo for (complessità lineare...)
    Mentre il primo algoritmo ha ancora complessità n^2.

    Considerando il caso peggiore quindi il bubblesort nella prima versione costa tanto quanto la seconda versione.

    Ciao.
    ...c'è chi come te attende l'alba...

  6. #6
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,031
    hai letto il testo fra i due esempi vero?
    Ho proprio scritto quello che hai detto tu... non è la condizione pessima a dover esser presa in esame, ma quella che richiede (n^2)-1 passaggi. Nel primo caso esegue tutte le iterazioni, nel secondo smette quando non swappa più...
    il succo era il perchè un manuale (scrito da Deitel poi...) propone il 1° esempio e non il secondo..

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Originariamente inviato da Lak3d
    Perchè non si pososno editare i propri post? che trovata assurda è? Ho notato un erroraccio nella swap
    Motivi precauzionali. Scrivere la versione revisionata in un nuovo post non dovrebbe essere un'operazione complessa...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Perchè la prima è la "versione standard" del bubble sort...
    Cmq quando ti parlavo di "n^2" non intendevo "i passi" fatti dall'algoritmo, ma la complessita'...
    Ciao!
    ...c'è chi come te attende l'alba...

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.