47 views
## 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) ```