4 Test de la fonction triBulle
Nous allons à présent nous focaliser sur la fonction nommée triBulle. Vous savez maintenant le rôle
de cette procédure. Puisque vous avez déjà exécuté l’ensemble de la page, la fonction triBulle est en
mémoire dans le terminal. Vous pouvez donc l’appeler directement depuis le celui-ci.
Exécutez la commande >>> triBulle([3,2,4,1,5]). Que se passe-t-il ?
Exécutez la commande >>> L=[3,2,4,1,5] ; triBulle([3,2,4,1,5]); L. Que se passe-t-il ?
Exécutez la commande >>> L=[3,2,4,1,5] ; triBulle(L) ; L. Que se passe-t-il ?
Comment expliquez-vous ces différences ?
Jusqu’à présent, vous n’avez exécuté la fonction triBulle que sur des listes d’entiers. Nous allons étudier
le cas d’autres types de listes.
Créez une liste contenant les entiers de 1 à 5 puis la lettre aentre guillemets. Exécutez la fonction
triBulle sur cette liste. Comment interprétez-vous le message d’erreur ?
Créez une liste contenant la première ligne de lettres de votre clavier chacune entre guillemets. On
aura par exemple L = ["a","z","e","r","t","y","u","i","o","p"]. Appelez la fonction triBulle
sur cette liste, puis affichez L. Que peut-on en déduire de l’opérateur de comparaison en Python ?
Créez une liste contenant des mots. Appelez la fonction triBulle sur cette liste, puis affichez-la. Que
peut-on en déduire sur l’opérateur de comparaison en Python ?
5 Étude poussée de la fonction triBulle
Pour réaliser cette section, vous devez lire attentivement la fonction triBulle.
Testez la fonction len(). Que rend-t-elle ?
Exécutez la commande >>> for i in range(4): print (i) et comprendre cette instruction.
Déroulez à la main l’algorithme de la fonction triBulle sur la liste [3,1,4,2]. Avez-vous effectué des
opérations inutiles ? Y’a-t-il des variables qui sont définies et que vous n’avez pas utilisées ?
Afin d’éviter ces opérations inutiles, proposez une amélioration de la fonction triBulle.
La variable nbechanges est globale et peut donc être modifiée à l’intérieur d’une fonction. Ajoutez une
ligne à la fonction echange qui incrémente la variable nbechanges à chaque échange de données.
Exécutez la fonction triBulle sur une liste quelconque de 20 éléments, sur une liste de 20 éléments
triée, puis sur une liste de 20 éléments triée à l’envers. À chaque fois, affichez la variable nbechanges.On rappelle que
pour inverser une
liste L, il suffit de
taper L[::-1]
et relevez le nombre d’échanges effectués. Comparez ces résultats entre les deux versions de triBulle.
L’amélioration est-elle efficace sur le nombre d’échanges ?
En vous inspirant de ce qui a été fait pour le nombre d’échanges, créez un compteur pour le nombre
de comparaisons. Refaire les mêmes tests que précédemment. Votre amélioration est-elle efficace pour le
nombre de comparaisons ?
Conjecturez dans chacun des cas (amélioré ou non) une formule donnant le nombre de comparaisons
en fonction de la taille de la liste initiale. Vérifiez votre conjecture sur des listes de différentes tailles.
Peut-on effectuer le même raisonnement sur le nombre d’échanges ?
6 Étude d’un autre algorithme de tri
Dans cette section, nous allons voir que pour une même tâche, il existe plusieurs algorithmes. En parti-
culier, il existe de nombreux types de tris : certains sont adaptés à des données pour lesquelles l’échange
est facile, d’autres à des données pour lesquelles la comparaison est difficile.
Apportez les modifications nécessaires au script afin de pouvoir utiliser le tri Fusion. On rappelle que
la combinaison Ctrl+R permet de commenter un groupe d’instructions et que la combinaison Ctrl+T
permet de les décommenter..La complexité
du tri fusion est
optimale : il n’est
pas possible de trier
plus rapidement
une liste d’objets.
Exécutez le tri Fusion sur différentes listes et relevez les nombre d’échanges et de comparaisons. Que
peut-on dire sur ce tri par rapport au tri à Bulles ?
Conjecturez une formule explicitant le nombre de comparaisons en fonction de la taille de la liste
initiale. Effectuez une comparaison avec le tri à Bulles.
2 TP Informatique - Introduction à Python
Lycée Montesquieu