You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
4.1 KiB

import matplotlib.pyplot as plt
import random
import time
def algo1(tab):
echange = 1
nb = len(tab)
deb = 0
fin = nb - 1
while echange > 0:
echange = 0
for i in range(deb, fin):
if tab[i] > tab[i+1]:
tab[i], tab[i+1] = tab[i+1], tab[i]
echange += 1
fin -= 1
for i in range(fin, deb, -1):
if tab[i] < tab[i-1]:
tab[i], tab[i-1] = tab[i-1], tab[i]
echange += 1
deb += 1
def algo2(tab):
nb = len(tab)
min_val = min(tab)
max_val = max(tab)
cpt = [0] * (max_val - min_val + 1)
for i in range(nb):
cpt[tab[i]-min_val] += 1
j = 0
for i in range(max_val - min_val + 1):
while cpt[i] != 0:
tab[j] = i + min_val
j += 1
cpt[i] -= 1
def algo3(tab):
n = len(tab)
for i in range(1, n):
pos = recherche_pos(tab, i, tab[i])
if pos != i:
tmp = tab[i]
for j in range(i, pos, -1):
tab[j] = tab[j-1]
tab[pos] = tmp
def recherche_pos(tab, n, val):
for i in range(n):
if val < tab[i]:
return i
return n
random.seed() # initialisation de la graine pour les nombres aléatoires
# Tableau aléatoire
tailles = list(range(100, 1100, 100))
temps_algo1_aleatoire = []
temps_algo2_aleatoire = []
temps_algo3_aleatoire = []
for n in tailles:
tab = [random.randint(0, 999) for i in range(n)] # nombres aléatoires entre 0 et 999
start = time.time()
algo1(tab)
end = time.time()
temps_algo1_aleatoire.append(end - start)
start = time.time()
algo2(tab)
end = time.time()
temps_algo2_aleatoire.append(end - start)
start = time.time()
algo3(tab)
end = time.time()
temps_algo3_aleatoire.append(end - start)
# Tableau ordonné
temps_algo1_ordre_croissant = []
temps_algo2_ordre_croissant = []
temps_algo3_ordre_croissant = []
for n in tailles:
tab = list(range(n))
start = time.time()
algo1(tab)
end = time.time()
temps_algo1_ordre_croissant.append(end - start)
start = time.time()
algo2(tab)
end = time.time()
temps_algo2_ordre_croissant.append(end - start)
start = time.time()
algo3(tab)
end = time.time()
temps_algo3_ordre_croissant.append(end - start)
# Tableau ordonné à l'envers
temps_algo1_ordre_decroissant = []
temps_algo2_ordre_decroissant = []
temps_algo3_ordre_decroissant = []
for n in tailles:
tab = list(range(n, 0, -1))
start = time.time()
algo1(tab)
end = time.time()
temps_algo1_ordre_decroissant.append(end - start)
start = time.time()
algo2(tab)
end = time.time()
temps_algo2_ordre_decroissant.append(end - start)
start = time.time()
algo3(tab)
end = time.time()
temps_algo3_ordre_decroissant.append(end - start)
# Graphes pour tableau aléatoire
plt.plot(tailles, temps_algo1_aleatoire, label='Algo 1')
plt.plot(tailles, temps_algo2_aleatoire, label='Algo 2')
plt.plot(tailles, temps_algo3_aleatoire, label='Algo 3')
plt.xlabel('Taille du tableau')
plt.ylabel('Temps d\'exécution (en secondes)')
plt.title('Temps d\'exécution en fonction de la taille du tableau (tableau aléatoire)')
plt.legend()
plt.show()
# Graphes pour tableau ordonné croissant
plt.plot(tailles, temps_algo1_ordre_croissant, label='Algo 1')
plt.plot(tailles, temps_algo2_ordre_croissant, label='Algo 2')
plt.plot(tailles, temps_algo3_ordre_croissant, label='Algo 3')
plt.xlabel('Taille du tableau')
plt.ylabel('Temps d\'exécution (en secondes)')
plt.title('Temps d\'exécution en fonction de la taille du tableau (tableau ordonné croissant)')
plt.legend()
plt.show()
# Graphes pour tableau ordonné à l'envers
plt.plot(tailles, temps_algo1_ordre_decroissant, label='Algo 1')
plt.plot(tailles, temps_algo2_ordre_decroissant, label='Algo 2')
plt.plot(tailles, temps_algo3_ordre_decroissant, label='Algo 3')
plt.xlabel('Taille du tableau')
plt.ylabel('Temps d\'exécution (en secondes)')
plt.title('Temps d\'exécution en fonction de la taille du tableau (tableau ordonné à l\'envers)')
plt.legend()
plt.show()