From b77fb2d29bc8bee7f6d766de45f3ada7bef15554 Mon Sep 17 00:00:00 2001 From: Geoffrey Frogeye Date: Tue, 10 Mar 2015 11:22:34 +0100 Subject: [PATCH] Tri par selection minimum --- S2/TP4/analyse_tris.py | 117 +++++++++++++++++++++++++---------------- 1 file changed, 73 insertions(+), 44 deletions(-) diff --git a/S2/TP4/analyse_tris.py b/S2/TP4/analyse_tris.py index c15464a..ae57b27 100644 --- a/S2/TP4/analyse_tris.py +++ b/S2/TP4/analyse_tris.py @@ -33,50 +33,6 @@ def question(numero): partie("Prérequis") -partie("Travail à réaliser") - -section("Préliminaires") - -question(1) - -def liste_croissante(n): - """ - int -> list(int), construit la liste des entiers compris entre 0 et n-1, rangés dans l'ordre croissant - CU: n est un entier positif - """ - assert(type(n)==int and n>=0) - - return [i for i in range(n)] - - -question(2) - -def liste_decroissante(n): - """ - int -> list(int), construit la liste des entiers compris entre 0 et n-1, rangés dans l'ordre décroissant - CU: n est un entier positif - """ - assert(type(n)==int and n>=0) - - return [i for i in range(n-1, 0, -1)] - -question(3) - -def liste_alea(n, a, b): - """ - int, int, int → list - Renvoie une liste d’entiers, qui construit une liste de longueur n les entiers choisis au hasard - compris entre a et b. - """ - res = [] - for i in range(n): - res.append(randint(a, b)) - return res - -section("Compter les comparaisons") - -compteur = 0 - def comp(x, y): """ parametres @@ -97,8 +53,81 @@ def comp(x, y): else: return 1 +def select_min(l, a, b): + """ + list, int, int → int + Renvoie l'indicde d'un élément minimal de la tranche l[a:b] + CU : l est une liste de longueur n, d'éléments homogènes ordonnables, et a et b deux indices tels + que 0 ≤ a < b ≤ n + """ + assert 0 <= a < b <= len(n) + + imin = a + for i in range(a + 1, b): + if comp(l[i], imin) == -1 + imin = i + return imin + +def tri_select_min(l): + """ + list → ∅ + La liste l est trié (selon l'algorithme du tri par sélection du minimum) + CU : l est une liste de longueur n, homogène, d’éléments ordonnables + """ + for i in range(len(l) - 2): + imin = select_min(l, i, n - 1) + l[i], l[imin] = l[imin], l[i] + +partie("Travail à réaliser") + +section("Préliminaires") + question(1) +def liste_croissante(n): + """ + int → list(int) + Retourne la liste des entiers compris entre 0 et n-1, rangés dans l'ordre croissant + CU: n est un entier positif + """ + assert(type(n) == int and n >= 0) + + return [i for i in range(n)] + + +question(2) + + +def liste_decroissante(n): + """ + int → list(int) + Retourne la liste des entiers compris entre 0 et n-1, rangés dans l'ordre décroissant + CU: n est un entier positif + """ + assert(type(n) == int and n >= 0) + + return [i for i in range(n - 1, 0, -1)] + +question(3) + + +def liste_alea(n, a, b): + """ + int, int, int → list + Renvoie une liste d’entiers, qui construit une liste de longueur n les entiers choisis au hasard + compris entre a et b. + """ + res = [] + for i in range(n): + res.append(randint(a, b)) + return res + +section("Compter les comparaisons") + +question(1) + +compteur = 0 + question(2) partie("Analyse du tri par sélection")