## Visualisation des algorithmes de tri
```python
import pyxel as px
import random
H = 400
W = 600
# Création de la liste à trier
random.seed(1)
a=[i for i in range(0,50)]
random.shuffle(a)
# -------------------------
def tri_insertion(liste):
liste_interne = liste[:]
for i in range(1,len(liste_interne)):
if liste_interne[i-1] > liste_interne[i]:
j = i
while liste_interne[j-1] > liste_interne[j] and j > 0:
yield liste_interne, j, j-1, 1
liste_interne[j], liste_interne[j - 1] = liste_interne[j - 1], liste_interne[j]
j = j -1
else:
yield liste_interne, i, i-1, 1
yield liste_interne, i, i-1, 0
def tri_bulles(liste):
liste_interne = liste[:]
for k in range(len(liste_interne),1,-1):
for i in range(1,k):
yield liste_interne, i, i-1, 1
if liste_interne[i-1] > liste_interne[i]:
liste_interne[i], liste_interne[i - 1] = liste_interne[i - 1], liste_interne[i]
yield liste_interne, i, i-1, 0
def tri_selection(liste):
liste_interne = liste[:]
for i in range(len(liste_interne)):
max_ind = 0
for k in range(len(liste_interne) - i):
if liste_interne[k] > liste_interne[max_ind]:
max_ind = k
yield liste_interne, i, k, 1
liste_interne[len(liste) - i -1],liste_interne[max_ind] = liste_interne[max_ind],liste_interne[len(liste) - i -1]
yield liste_interne, i, k, 0
gen_tri = tri_insertion(a)
etats = next(gen_tri)
gen_tri2 = tri_bulles(a)
etats2 = next(gen_tri2)
gen_tri3 = tri_selection(a)
etats3 = next(gen_tri3)
nb_op = [0]*3
def update():
global etats, etats2, etats3, a, gen_tri, gen_tri2, gen_tri3, nb_op
if etats[-1]:
etats = next(gen_tri)
if etats2[-1]:
etats2 = next(gen_tri2)
if etats3[-1]:
etats3 = next(gen_tri3)
if not (etats3[-1] or etats2[-1] or etats[-1]):
random.seed(1)
a=[i for i in range(0,50)]
random.shuffle(a)
gen_tri = tri_insertion(a)
etats = next(gen_tri)
gen_tri2 = tri_bulles(a)
etats2 = next(gen_tri2)
gen_tri3 = tri_selection(a)
etats3 = next(gen_tri3)
nb_op = [0]*3
def draw():
global etats, etats2, etats3
px.cls(0)
px.text(250,10,"tri par insertion",7)
px.text(250,140,"tri à bulles",7)
px.text(250,270,"tri par sélection",7)
px.text(50,10,f"Nombre d'opérations : {str(nb_op[0]//100)}",7)
px.text(50,140,f"Nombre d'opérations : {str(nb_op[1]//100)}",7)
px.text(50,270,f"Nombre d'opérations : {str(nb_op[2]//100)}",7)
lst,i,j,fin = etats
wbar = W // len(lst)
for k in range(len(lst)):
if fin:
nb_op[0] += 1
col = 5
if k == i:
col = 6
elif k == j:
col = 7
else :
col = 8
x = wbar * k
px.rect(x, 130-lst[k], wbar-1, lst[k], col)
lst,i,j,fin = etats2
for k in range(len(lst)):
if fin:
nb_op[1] += 1
col = 5
if k == i:
col = 6
elif k == j:
col = 7
else :
col = 8
x = wbar * k
px.rect(x, 260-lst[k], wbar-1, lst[k], col)
lst,i,j,fin = etats3
for k in range(len(lst)):
if fin:
nb_op[2] += 1
col = 5
if k == i:
col = 6
elif k == j:
col = 7
else :
col = 8
x = wbar * k
px.rect(x, 390-lst[k], wbar-1, lst[k], col)
px.init(W, H)
px.run(update, draw)
```