Non sto dicendo che questo sia il miglior algoritmo di ordinamento.. Mi sembra solo un BubbleSort più efficiente di quello classico
procedure BubbleSort( A : lista di elementi da ordinare)
alto ? lenght(A) - 1
while (alto > 0) do
for i ? 0 to alto do
if (A[i] > A[i + 1]) then //scambiare il '>' con '<' per ottenere
swap ( A[i], A[i+1] ) // un ordinamento decrescente
alto ? alto - 1
Questo è il normale BubbleSort.. In questo io effettuo tutto il ciclo for ad ogni passo del while.. Se metti caso io ho un array già ordinato:
1 2 3 4 5 6
contronto 1-2 2-3 3-4 4-5 5-6 poi escludo il 6
confronto 1-2 2-3 3-4 4-5 poi escludo il 5
............. e così via per ogni elemento dell'array..
Quindi con il BubbleSort io se ho un array già ordinato oppure un array ordinato al contrario, faccio sempre lo stesso numero di confronti e ripeto confronti già effettuati.
void ordinamento(int array[],int n)
{
int i,y;
for(i=1;i<n;i++) //scorro tutto l’array a partire dal secondo elemento
{
y=i; //assegno ad y il valore dell’indice
while(y>0 && array[y]<array[y-1]) //entro SOLO se la condizione è rispettata
{
scambia(&array[y],&array[y-1]);
y--;
}
}
}
Nel BubbleSort che ho postato io invece se ho lo stesso array:
1 2 3 4 5 6
confronto 2-1
confronto 3-2, 3>2 quindi non faccio altri confronti perchè so già che saranno inutili
confronto 4-3, idem
........ e così vià per ogni elemento dell'array..
Con lo stesso array io ho solo n-1 confronti..
Una cosa del genere non risulta essere migliore?? Ti ripeto non sto dicendo che è l'algoritmo di ordinamento migliore, mi sembra solo un Bubble più efficiente di quello classico..