Mi si chiede di migliorare l'efficienza dell'ordinamento vettoriale bubble
1- Invece di eseguire 9 confronti ogni passaggio, scalare, cioè 8 nel 2°, 7 nel 3° ecc...e qua ho risolto con un incremento.
2-Eliminare passaggi superflui, cioè alla fine di ogni PASSAGGIO verificare se siano stati eseguiti scambi, se non cè scambio tutti i dati sono nell'ordine giusto quindi uscire dal ciclo, altrimenti sarà necessario un passaggio in piu.
#include <stdio.h>
#include <conio.h>
#define SIZE 10
main()
{
int a[SIZE] = {2,1,45,8,10,12,89,68,45,37};
int i, pass, hold, z, counter;
printf("Numeri in ordine originale\n");
for(i = 0, z = 2; i <= SIZE - 1; i++)
printf("%4d", a[i]);
for(pass = 0; pass <= SIZE - 2; pass++)
for(i = 0, counter = 0; i <= SIZE - 2; i++)
if(counter == 0){
if(a[i] > a[i + 1]){
hold = a[i];
a[i] = a[i + 1];
a[i + 1] = hold;
counter++;
}
if(counter != 0){
counter = 0;
i++; /*Incrementando di 1 i, cosi eseguo ad ogni passaggio un confronto in meno*/
}
else
counter = 1;
}
printf("\nDati in ordine ascendente\n");
for(i = 0; i <= SIZE - 1; i++)
printf("%4d", a[i]);
printf("\n");
getch();
}
Al 2° problema non riesco a trovare una soluzione a meno che non utilizzi un continue...