{"id":1203,"date":"2025-05-11T08:28:00","date_gmt":"2025-05-11T06:28:00","guid":{"rendered":"http:\/\/labodemaths.fr\/WordPress3\/?p=1203"},"modified":"2025-05-12T07:39:21","modified_gmt":"2025-05-12T05:39:21","slug":"nsi-listes-et-algorithmes-de-tris","status":"publish","type":"post","link":"https:\/\/labodemaths.fr\/WordPress3\/nsi-listes-et-algorithmes-de-tris\/","title":{"rendered":"NSI : listes et algorithmes de tris"},"content":{"rendered":"\n<h2>1. M\u00e9thodes de tris<\/h2>\n\n\n\n<p>Pour pouvoir \u00e9tudier des donn\u00e9es, il est souvent n\u00e9cessaire de les trier par ordre croissant ou d\u00e9croissant.<br>Il existe diff\u00e9rentes m\u00e9thodes pour cela.<br>Ces algorithmes diff\u00e8rent par leurs complexit\u00e9s et leurs efficacit\u00e9s.<br>Pour visualiser diff\u00e9rents algorithmes de tri :<br><a rel=\"noreferrer noopener\" aria-label=\"https:\/\/www.toptal.com\/developers\/sorting-algorithms (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/www.toptal.com\/developers\/sorting-algorithms\" target=\"_blank\">https:\/\/www.toptal.com\/developers\/sorting-algorithms<\/a><\/p>\n\n\n\n<p>Pour r\u00e9viser et d\u00e9couvrir d&rsquo;autres algorithmes de tris ;<\/p>\n\n\n\n<p><meta charset=\"utf-8\"><a rel=\"noreferrer noopener\" aria-label=\"l'article sur les algorithmes de tris de la revue Interstice (s\u2019ouvre dans un nouvel onglet)\" href=\"https:\/\/interstices.info\/les-algorithmes-de-tri\/#:~:text=Selon%20le%20dictionnaire%2C%20%C2%AB%20trier%20%C2%BB,plusieurs%20classes%20selon%20certains%20crit%C3%A8res%20%C2%BB.&amp;text=Par%20exemple%2C%20trier%20N%20entiers,suite%20d'%C3%A9l%C3%A9ments%20%C3%A0%20trier.\" target=\"_blank\">l&rsquo;article sur les algorithmes de tris<\/a><\/p>\n\n\n\n<h3>2. Tri par s\u00e9lection<\/h3>\n\n\n\n<p>Un premier fichier pr\u00e9sentant les 3 algorithmes de tris vus en cours :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from random import randint\n\ndef liste_aleatoire(n):\n    # g\u00e9n\u00e9rer al\u00e9atoirement un liste de taille n\n    # contenant des nbres entiers entre 0 et 100\n    return &#91;randint(0,100) for i in range(n)]\n\ndef inverse_liste(a):\n    # inverse les termes de la liste\n    retour=&#91;]\n    for i in range(len(a)):\n        retour.append(a&#91;len(a)-1-i])\n    return retour\n\ndef triee(a):\n    # indique si une liste est tri\u00e9e\n    for i in range(len(a)-1):\n        if a&#91;i]>a&#91;i+1]:\n            return False\n    return True\n\ndef tri_selection(a):\n    # trie une liste par ordre croissant\n    # par l'algo de tri par selection\n    for i in range(len(liste)-1):\n        # pour voir le d\u00e9roulement de l'algorithme\n        # print(a)\n        indice_min=i\n        for j in range(i,len(liste)):\n            if a&#91;j]&lt;a&#91;indice_min]:\n                indice_min=j\n        a&#91;i],a&#91;indice_min]=a&#91;indice_min],a&#91;i]\n    return a\n\ndef tri_bulles(a):\n    # trie une liste par ordre croissant\n    # par l'algo de tri par bulle\n    liste=a.copy()\n    for i in range(len(liste)):\n        # pour voir le d\u00e9roulement de l'algorithme\n        #print(liste)\n        for j in range(len(liste)-1):\n            if liste&#91;j+1]&lt;liste&#91;j]:\n                liste&#91;j+1],liste&#91;j]=liste&#91;j],liste&#91;j+1]\n                # pour voir le d\u00e9roulement de l'algorithme\n                #print(liste)\n    return liste\n\n\n<\/code><\/pre>\n\n\n\n<h2>3. Tri par insertion<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>def tri_insertion(a):\n    # trie une liste par ordre croissant\n    # par l'algo de tri par insertion\n    for i in range(0,len(liste)-1):\n        j=i+1\n        val=a&#91;j]\n        while j>0 and a&#91;j-1]>val:\n            a&#91;j]=a&#91;j-1]\n            j=j-1\n            \n        a&#91;j]=val\n        #print(i,j,a)\n<\/code><\/pre>\n\n\n\n<h2>4. Comparer des m\u00e9thodes de tris<\/h2>\n\n\n\n<p>Un programme permettant de comparer le temps mis par ces diff\u00e9rents algorithmes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import tris\nfrom timeit import timeit\nimport pylab\n\n#timeit(setup='from tris import tri_select; from listes import cree_liste_melangee',stmt='tri_select(cree_liste_melangee(10))',number=100)\n\ndef mesure_temps(tri,longueur):\n    '''\n    retourne le temps maximal pour trier par tri par s\u00e9lection de 100 listes m\u00e9lang\u00e9es de longueur 10\n    : longueur : (int) longueur des listes \u00e0 trier\n    : CU :\n    : return : (list) une liste contenant le temps des listes de longueurs 1,2,......, longueur\n    \n    '''\n    liste_temps=&#91;]\n    for i in range(0,longueur):\n        temp = timeit(setup='from tris import '+ tri +'; from tris import liste_aleatoire',stmt=tri+'(liste_aleatoire('+str(i)+'))',number=100)\n        liste_temps.append(temp)\n    return liste_temps\n\n\ndef affichage(type_tri,longueur):\n    '''\n    affiche le graphique repr\u00e9sentant les temps maximums pour 100 listes tri\u00e9es de taille donn\u00e9e\n    '''\n    \n    correspondance = {# on cr\u00e9e un dictionnaire de correspondances\n    \"selection\":\"tri_selection\", # \n    \"insertion\":\"tri_insertion\",\n    \"bulles\":\"tri_bulles\",\n    \"sort\":\"tri_sort\",\n    }\n    \n\n    longueur_listes=&#91;i for i in range(1,longueur+1)]\n    # return correspondance&#91;type_tri]\n    liste_temps=mesure_temps(correspondance&#91;type_tri],longueur)\n    NBRE_ESSAIS = 100\n    pylab.title('Temps du tri '+type_tri+' (pour {:d} essais)'.format(NBRE_ESSAIS))\n    pylab.xlabel('taille des listes')\n    pylab.ylabel('temps en secondes')\n    pylab.grid()\n    pylab.plot(longueur_listes,liste_temps)\n    pylab.savefig(\"graphique \"+type_tri+\".png\")\n    pylab.show()\n\ndef comparaison_tris(longueur):\n    longueur_listes=&#91;i for i in range(1,longueur+1)]\n    # return correspondance&#91;type_tri]\n    NBRE_ESSAIS = 100\n    pylab.title('Temps cumul\u00e9 pour trier {:d} listes al\u00e9atoires,'.format(NBRE_ESSAIS)+'\\npour des listes de longueurs 1 \u00e0 '+str(longueur)+'.')\n    pylab.xlabel('taille des listes')\n    pylab.ylabel('temps en secondes \\npour {:d} listes '.format(NBRE_ESSAIS))\n    pylab.grid()\n    pylab.plot(longueur_listes,mesure_temps(\"tri_selection\",longueur),label=\"tri_selection\")\n    pylab.plot(longueur_listes,mesure_temps(\"tri_insertion\",longueur),label=\"tri_insertion\")\n    pylab.plot(longueur_listes,mesure_temps(\"tri_bulles\",longueur),label=\"tri_bulles\")\n    pylab.plot(longueur_listes,mesure_temps(\"tri_sort\",longueur),label=\"tri_sort\")\n    pylab.legend()\n    pylab.savefig(\"graphique comparaisons.png\")\n    pylab.show()\n\n\n\ncomparaison_tris(1000)\n<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-gallery columns-3 is-cropped\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons_100.png\" alt=\"\" data-id=\"1515\" data-link=\"https:\/\/labodemaths.fr\/WordPress3\/nsi-listes-et-algorithmes-de-tris\/graphique-comparaisons_100\/\" class=\"wp-image-1515\" srcset=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons_100.png 640w, https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons_100-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons-200.png\" alt=\"\" data-id=\"1516\" data-link=\"https:\/\/labodemaths.fr\/WordPress3\/nsi-listes-et-algorithmes-de-tris\/graphique-comparaisons-200\/\" class=\"wp-image-1516\" srcset=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons-200.png 640w, https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons-200-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons.png\" alt=\"\" data-id=\"1517\" data-link=\"https:\/\/labodemaths.fr\/WordPress3\/nsi-listes-et-algorithmes-de-tris\/graphique-comparaisons-2\/\" class=\"wp-image-1517\" srcset=\"https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons.png 640w, https:\/\/labodemaths.fr\/WordPress3\/wp-content\/uploads\/2021\/03\/graphique-comparaisons-300x225.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/li><\/ul><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>1. M\u00e9thodes de tris Pour pouvoir \u00e9tudier des donn\u00e9es, il est souvent n\u00e9cessaire de les&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/labodemaths.fr\/WordPress3\/nsi-listes-et-algorithmes-de-tris\/\">Read the post<span class=\"screen-reader-text\">NSI : listes et algorithmes de tris<\/span><\/a><\/div>\n","protected":false},"author":2,"featured_media":1211,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[57],"tags":[],"_links":{"self":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1203"}],"collection":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/comments?post=1203"}],"version-history":[{"count":23,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1203\/revisions"}],"predecessor-version":[{"id":2811,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/posts\/1203\/revisions\/2811"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media\/1211"}],"wp:attachment":[{"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/media?parent=1203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/categories?post=1203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labodemaths.fr\/WordPress3\/wp-json\/wp\/v2\/tags?post=1203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}