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ì...
Non fate caso se ci sono degli errori, l'ho scritto velocemente...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; }
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?
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... manualicodice:#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; }![]()

Rispondi quotando