#!/usr/bin/python3 # -*- coding: utf-8 -*- """ TP AP1 Licence SESI 1ère année Univ. Lille 1 analyse_tris.py TP4 - Evaluation empirique des tris http://www.fil.univ-lille1.fr/~L1S2API/CoursTP/tp4_tri.html """ __author__ = 'PREUD\'HOMME Geoffrey & BEAUSSART Jean-loup' __date_creation__ = 'Tue, 10 Mar 2015 10:26:41 +0100' from random import randint, shuffle def partie(nom): print('\n', nom, '=' * len(nom), sep='\n') def section(nom): print('\n', nom, '-' * len(nom), sep='\n') def question(numero): print('\n***', 'Question', numero, '***') partie("Prérequis") def comp(x, y): """ parametres x , y de même type et comparables valeur renvoyee : int -1 si xy action : incrémente le compteur CU : aucune """ global compteur compteur = compteur + 1 if x < y: return -1 elif x == y: return 0 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") question(1) question(2) partie("Analyse du tri par insertion") question(1) section("Dans le meilleur des cas") question(1) question(2) section("Dans le pire des cas") question(1) question(2) section("En moyenne") question(1) question(2) question(3) question(4) question(5) section("Avec Gnuplot") question(1)