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