programme de 5 ou 6 tris et leurs tracés

                                                        ( juste l'explication des troiss nouveaux tris)

console:  Echec!!!!

100

1000

5000

8000

10000

Traceback (most recent call last):

File "D:\1\python de la fournaise\tri\bien version prof automatisation_mesure_duree_tri_selection_insertion_sort_sorted_tri_fusion.py", line 130, in <module>

tracer_figure(n,duree_insertion,duree_selection,duree_sort,duree_sorted,duree_fusion)

File "D:\1\python de la fournaise\tri\bien version prof automatisation_mesure_duree_tri_selection_insertion_sort_sorted_tri_fusion.py", line 121, in tracer_figure

plt.plot(n, duree_fusion,"o", color='purple', label = 'fusion', marker='*')

File "C:\EduPython\App\lib\site-packages\matplotlib\pyplot.py", line 2796, in plot

is not None else {}), **kwargs)

File "C:\EduPython\App\lib\site-packages\matplotlib\axes\_axes.py", line 1665, in plot

lines = [*self._get_lines(*args, data=data, **kwargs)]

File "C:\EduPython\App\lib\site-packages\matplotlib\axes\_base.py", line 225, in __call__

yield from self._plot_args(this, kwargs)

File "C:\EduPython\App\lib\site-packages\matplotlib\axes\_base.py", line 391, in _plot_args

x, y = self._xy_from_xy(x, y)

File "C:\EduPython\App\lib\site-packages\matplotlib\axes\_base.py", line 270, in _xy_from_xy

"have shapes {} and {}".format(x.shape, y.shape))

ValueError: x and y must have same first dimension, but have shapes (5,) and (0,)

>>>











Le tri par fusion:

def tri (left,right):

    tabeau=[]

    i=j=0

    while i < len(left) and j < len(right):

        if left[i]<=right[j]:

            tabeau.append(left[i])

            i=i+1

        else:

            tabeau.append(right[j])

            j=j+1

        while i < len(left):

            tabeau.append(left[i])

            i=i+1

        while j < len(right):

            tabeau.append(right[j])

            j=j+1

    return tabeau



def FUSION (list):

    if len(list)<=1:

        return list

    else:

        middle=int(len(list)/2)

        left=FUSION(list[:middle])

        right=FUSION(list[middle:])

    return tri(left,right)






Le tri à bulle:

def tri_bulle(liste):

    t1=time()

    n=len(liste)

     # Traverser tous les éléments du tableau

    for i in range(n):

        for j in range(0, n-i-1):

        # échanger si l'élément trouvé est plus grand que le suivant

            if liste[j] > liste[j+1] :

                liste[j], liste[j+1] = liste[j+1], liste[j]

    t2=time()

    duree=t2-t1

    duree_bulle.append(duree)

    random.shuffle(liste)








Traceback (most recent call last):

File "C:\Users\axel.gavlak\AppData\Local\Temp\Temp1_102005-1545180-tri-rapide-quick-sort.zip\Tri rapide ou quick sort.py", line 36, in <module>

File "C:\Users\axel.gavlak\AppData\Local\Temp\Temp1_102005-1545180-tri-rapide-quick-sort.zip\Tri rapide ou quick sort.py", line 22, in qsort

TypeError: 'int' object is not subscriptable

>>>

Le tri rapide (ou tri par pivot)

def qsort(liste): 

    t1=time() 
    n=len(liste)
    for u in range(n): 
        if u == []: return [] 
        pivot, g, d = u[0], [], [] 
        for x in n[1:]: g.append(x) if x<pivot else d.append(x)            return qsort(g)+[u[0]]+qsort(d) 
        i=i+1
        t2=time()
        duree=t2-t1 
        duree_rapide.append(duree) 
        return(duree_rapide)

Tri par fusion:

Ablado no phytonyos.

Donc je cherche à trouver la coquille. Je met des prints a certains endroit notamment pour vérifier les listes, et c'est illisible il y a trop de chiffre pour moi. Les tailles des listes ne sont pas bonnes, une est rempli et l'autre non.

le code en question:

def fusion(liste):

if len(liste) < 2:

return liste

middle = int(len(liste) / 2)

left = fusion(liste[:middle])

right = fusion(liste[middle:])

return (left, right)

def m(left, right):

t1=time()

if not len(left) or not len(right):

return left or right

result = []

i, j = 0, 0

while len(result) < len(left) + len(right):

if left[i] < right[j]:

result.append(left[i])

i += 1

else:

result.append(right[j])

j += 1

if i == len(left) or j == len(right):

result.extend(left[i:] or right[j:])

break

t2=time()

duree=t2-t1

duree_fusion.append(duree)

print(duree_fusion)

return(duree_fusion)

random.shuffle(liste)

j'ai réfléchie (oui ça m'arrive quelques fois, et réfléchir prend un "e" parce que c'est mon site et c'est moi qui décide ici**) et je me suis dit que len(liste) était forcément supérieur à 2 et non inférieur je fit donc une inspection complète de ce code pour le moins douteux. J'ai donc ouvert une nouvelle page python en recopiant la liste n pour simuler le tri à fusion seul et ainsi voir ce qu'il ne va pas. Bon d'après ce que je vis le code pouvait faire un tri (Bravo moi je suis surprenant) mais la liste duree_fusion et vide (certainement un sabotage). Donc je l'ai refait au prix de nombre de mes soirées. Et cela donne le code d'à côté.

Explications:

Ondéfinie une fonction FUSION qui va prnedre les valeur de la liste n. Si iest égale ou supérieur à la longueur de la liste alors on renvoie la litse. Sinon on affecte à la variable middle la moitier de la liste (et int pour que ce soit un nombre entier). On affecte à la liste left les valeurs qui se trouvent avant la moitier de la liste FUSION et on affecte à la liste right les valeurs qui se trouvent après la moitier de la liste FUSION. Puis on renvoie les liste left et right à la fonction tri. On définie une fonction tri qui prend les valeurs des listes left et right. On affecte à la variable tabeau une liste vide. On affecte à i et j la valeur 0. On créer une boucle tant que i est supérieur à la longueur de la liste left et que j est supérieur à la longueur de la liste right on continue la boucle. Si la valeur du tableau left à l'indice i est inférieur ou égale à la valeur du tableau right à l'indice j, alors on ajoute au tabeau la valeur du tableau left à l'indice i et on ajoute 1 à i. Sinon on ajoute à tabeau la valeur du tableau right à l'indice j et on ajoute 1 à j. Nouvelle boucle, tant que i est inférieur à la longueur de la liste left, on ajoute à tabeau la valeur du tableau left à l'indice i et on ajoute 1 à i. Et dernière boucle, tant que j est inférieur à la longueur de la liste right  on ajoute à tabeau la valeur du tableau right à l'indice j et on ajoute 1 à j. Enfin on renvoie à la console la liste tabeau.

la durée est calculer dans la boucle for élément dans le programme des 4 tri avec tracer. Ici:

for element in n:

    list= creation_liste_aleatoire(element)

    t1=time()

    FUSION(liste)

    t2=time()

    duree=t2-t1

    duree_fusion.append(duree)

On affecte à T1 la valeur du temps à ce moment puis on appelle la fonction FONCTION qui prend les valeurs de la liste liste. On affecte à T2 la valeur du temps à ce moment puis on affecte à la variable duree t2-t1 et on ajoute cette dernière à la liste duree_fusion.




Le tri à bulle:

Pour le tri à bulle j'ai trouvé le code sur le site "Tri à bulle en python - WayToLearnX" et je n'ai eu aucun problème si ce n'est que je dut modifier le nom de la liste qu'il avait nommé tab.

Ici on définie une fonction tri_bulle qui va prendre les valeurs de la liste n (voir plus tard parceque je vais l'écrire après dans le code complet). Puis on affecte à la valeur t1 le temps (qui va chronométrer le temps à partir de ce moment précis). Puis c'est un commentaire pour que je puisse me retrouver dans tout ça. On créer une boucle où "i"  va prendre toutes les valeurs de la liste n. Puis une boucle où "j" va prendre toutes des valeurs . Puis si la valeur en position j est plus grande que la valeur en position j+1 (la valeur après j) de la liste alors on les échange de place dans cette dernière sinon on continue la boucle. ( et j'ai vérifié continuer prend bien un "e" au présent à la troisième personne du singulier***). Puis on affecte à la variable t2 le temps (qui va chronométrer le temps à partir de ce moment précis). On affecte à la variable duree la différence (terme mathématique pour montrer que j'ai du vocabulaire de ce1... ) de la valeur du temps t2 et de la valeur du temps t1 pour savoir le temps que met le programme à faire le tri. Puis on rajoute la valeur de duree dans la liste duree_bulle. Enfin on mélange la liste "liste".





Pour le tri rapide j'ai aussi un problème (heureusement que je sui quelqu'un de patient parce que sinon...). Donc j'ai également pris le code appart et j'ai cette erreur. Et là c'est le drame coup dur pour Gavlak qui ne pourras terminer son travail que à 2h du matin parce que là c'est la fin du cours et comme je suis têtu JE VEUT TROUVER LA SOLUTION MOI MEME. Donc avec l'aide d'un autre Gavlak je fini par trouver la solution à ce problème car il vaut mieux deux cerveaux que 1. 


Explications:

On définie une fonction qsort (pourquoi l'appeller comme ça, parce que dans le site, encore une fois pour le moins douteux, ils l'ont appellé comme ça.) qui va prendre toutes les valeurs de la liste n. On affecte à T1 la valeur du temps à ce moment. On affecte à n la longueur de la liste. On créé une boucle for où u va prendre toutes les valeurs de la liste n. Si u vaut une liste vide alors on renvoie une liste vide. On affecte au pivot la première valeur de la liste u , on affecte à la variable g une liste vide et on affecte à la varible d une liste vide. Boucle pour x qui prend toutes les valeurs (après l'éléments 1) de la liste n. On rajoute x à la liste g si x est inférieur au pivot sinon on rajoute x à la liste d. On renvoie la liste g plus l'élément à l'indice 0 de la liste u plus la liste d. On affecte à la variable i, i+1. Puis on affecte à T2 la valeur du temps à ce moment puis on affecte à la variable duree t2-t1 et on ajoute cette dernière à la liste duree_rapide.Enfin on renvoie la liste.



sites: Trier par fusion en Python | Delft Stack(le site tri par fusion)

Python : Tri rapide (Quick sort) - CodeS SourceS (commentcamarche.net)

récursivité=fonction qui s'appelle ellemême



**C'est une petite blaguounette monsieur c'est vous qui décidez ici moi je suis bien trop gentil pour me rebeller.


***Je me rebelle toujours pas j'expose des faits voir j'émets des hypothèses et je les vérifies comme tout bon scientifique que je suis.

Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer