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