Je vous écris un programme qui met en oeuvre l'algorithme de tri d'insertion pour trier un tableau:Comment: Split tout en boucle avec double comparaison en deux?
public void insertionSort()
{
int in, out;
for (out = 1; out < nElems; out++) // out is dividing line
{
copies++;
long temp = a[out]; // remove marked item
in = out; // start shifts at out
while (in > 0 && a[in - 1] >= temp) // until one is smaller,
{
a[in] = a[in - 1]; // shift item to right
--in; // go left one position
++comparissons;
}
a[in] = temp; // insert marked item
} // end for
} // end insertionSort(
Je suis également que la mise en œuvre des compteurs comptent le nombre des comparaisons sont effectuées au cours de l'algorithme. dans ma boucle while:
while (in > 0 && a[in - 1] >= temp) // until one is smaller,
{
a[in] = a[in - 1]; // shift item to right
--in; // go left one position
++comparissons;
}
comparaison de deux sont faits, cela signifie que pour ces deux comparaison la variable 'comparissons est de incrémenté d'un (même si deux comparaisons sont en fait). Ma question est la suivante: comment décomposer cette boucle while avec deux comparaisons en deux parties afin que je puisse incrémenter des comparaisons chaque fois qu'une comparaison est faite tout en conservant la même fonctionnalité.
Merci!
JLL
Génial, merci! Le code fonctionne mais j'essaie toujours de comprendre la logique. –
@ J.L.Louis la condition2 à l'intérieur de la boucle while est déplacée dans une condition if pour compter les comparaisons2 effectuées par elle. Les comparaisons1 (original) sont comptées pour condition1. Aussi, vous voulez vous assurer que la boucle se brise quand la condition 2 n'est pas satisfaite – hrv