<\/code><\/p>\n\n\n\ntri_selection(Tableau T)\n n \u2190 longueur(T) \n pour i de 0 \u00e0 n - 2\n min \u2190 i \n pour j de i + 1 \u00e0 n - 1\n si T[j] < T[min], alors min \u2190 j\n fin pour\n si min \u2260 i, alors \u00e9changer T[i] et T[min]\n fin pour\nfin tri_selection<\/pre>\n\n\n\nLa complexit\u00e9 du tri par s\u00e9lection est en O(n\u00b2). Il n\u2019est donc pas tr\u00e8s efficace. Mais, il fait tr\u00e8s peu d\u2019\u00e9changes (au maximum, n-1). Donc, il peut \u00eatre utilis\u00e9 si les \u00e9l\u00e9ments sont co\u00fbteux \u00e0 d\u00e9placer (ce qui n\u2019est pas le cas d\u2019un tableau d\u2019entier) et peu co\u00fbteux \u00e0 comparer.<\/p>\n\n\n\n
Le tri \u00e0 bulle \u23fa<\/h3>\n\n\n\n \ud83d\udc49 Cette m\u00e9thode de tri consiste \u00e0 inverser tous les couples de nombres non ordonn\u00e9s.<\/strong> Par exemple, avec les 3 \u00e9l\u00e9ments : 6|5|4 : le tri \u00e0 bulle va comparer 6 et 5, comme ils ne sont pas ordonn\u00e9s, ils vont \u00eatre invers\u00e9s (on aura 5|6|4), puis va comparer 6 et 4 et les \u00e9changer (5|4|6). \u2611\ufe0f<\/p>\n\n\n\n\u00c0 la fin de la premi\u00e8re boucle, le plus grand \u00e9l\u00e9ment du tableau sera forc\u00e9ment bien plac\u00e9. Puis, l\u2019algorithme recommence jusqu\u2019\u00e0 la fin du tri.<\/strong><\/p>\n\n\n\nVoici le pseudo-code du tri \u00e0 bulle :<\/p>\n\n\n\n
tri_\u00e0_bulles(Tableau T)\n pour i allant de (taille de T)-1 \u00e0 1\n pour j allant de 0 \u00e0 i-1\n si T[j+1] < T[j]\n (T[j+1], T[j]) = (T[j], T[j+1])\n fin_si\n fin_pour\n fin_pour\nfin_tri_\u00e0_bulles<\/pre>\n\n\n\nCet algorithme a aussi une complexit\u00e9 quadratique en O(n\u00b2). Cependant, plus le tableau est pr\u00e9alablement tri\u00e9, plus il est efficace. En moyenne, il est aussi efficace que le tri par s\u00e9lection, mais dans les cas particuliers o\u00f9 le tableau est en partie ordonn\u00e9, il est plus efficace.<\/p>\n\n\n\n
Le tri par insertion<\/h3>\n\n\n\n \ud83d\udc49 Cette strat\u00e9gie consiste \u00e0 placer trier \u00e9l\u00e9ment par \u00e9l\u00e9ment le tableau. D\u2019abord, l\u2019algorithme trie les 2 premi\u00e8res valeurs. Puis, il place la troisi\u00e8me \u00e0 sa place vis-\u00e0-vis des 2 premi\u00e8res. Au global, il s\u2019agit de placer la valeur i dans la partie du tableau d\u00e9j\u00e0 tri\u00e9e allant de la premi\u00e8re valeur \u00e0 la i-1\u00e8me.<\/strong><\/p>\n\n\n\nVoici le pseudo-code correspondant : \n<\/code><\/p>\n\n\n\ntri_insertion(Tableau T)\n pour i de 1 \u00e0 taille(T) - 1\n x \u2190 T[i] \n j \u2190 i \n tant que j > 0 et T[j - 1] > x\n T[j] \u2190 T[j - 1]\n j \u2190 j - 1\n fin_tant_que\n T[j] \u2190 x \n fin_pour\nfin_tri_insertion<\/pre>\n\n\n\nEn moyenne, le tri par insertion a une complexit\u00e9 quadratique (O(n\u00b2)), mais si le tableau est d\u00e9j\u00e0 ordonn\u00e9, sa complexit\u00e9 est lin\u00e9aire (O(n)).<\/p>\n\n\n\n \n \n
\n
\n
\n
\n <\/div>\n
\n
\n
\n
\n
\n <\/div>\n
Margot<\/p>
Arts et M\u00e9tiers ParisTech<\/p>
\n
\n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n <\/div>\n 22\u20ac\/h\/h<\/p> <\/div>\n <\/div>\n
\n
\n
\n <\/div>\n
Bastien<\/p>
Polytechnique<\/p>
\n
\n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n <\/div>\n 26\u20ac\/h<\/p> <\/div>\n <\/div>\n
\n
\n
\n <\/div>\n
Hugo<\/p>
Insa Lyon<\/p>
\n
\n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n <\/div>\n 16\u20ac\/h<\/p> <\/div>\n <\/div>\n
\n
\n
\n <\/div>\n
Thibault<\/p>
ENS Paris Ulm<\/p>
\n
\n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n \n \n <\/svg>\n <\/div>\n 20\u20ac\/h<\/p> <\/div>\n <\/div>\n <\/div>\n <\/div>\n<\/div>\n
\n
\n
\n <\/div>\n
Ton premier cours particulier<\/span> d’informatique est offert<\/span> ! \ud83c\udf81<\/span><\/p>\n<\/div>\n Tous nos profs sont pass\u00e9s par les meilleures \u00e9coles de France !<\/p>\n<\/div>\n
\n
\n J\u2019EN PROFITE !\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/div>\n <\/section>\n\n\n\n
Le tri rapide<\/h3>\n\n\n\n Le tri rapide est un peu plus complexe \u00e0 comprendre, mais il a de nombreux avantages que nous d\u00e9taillerons apr\u00e8s son explication. \ud83d\udcaa<\/p>\n\n\n\n
\ud83d\udc49 L\u2019id\u00e9e est de choisir un \u00e9l\u00e9ment au hasard dans le tableau et de s\u2019en servir comme pivot. On va placer d\u2019un c\u00f4t\u00e9 toutes les valeurs inf\u00e9rieures au pivot, et de l\u2019autre les valeurs sup\u00e9rieures \u00e0 celui-ci. Puis, il faudra r\u00e9it\u00e9rer cela pour chaque partie du tableau, jusqu\u2019\u00e0 que les partitions soient compos\u00e9es d\u2019un seul \u00e9l\u00e9ment. <\/strong><\/p>\n\n\n\nVoici comment on le code :<\/p>\n\n\n\n
partitionner(tableau T, entier premier, entier dernier, entier pivot)\n \u00e9changer T[pivot] et T[dernier] \n j := premier\n pour i de premier \u00e0 dernier - 1 \/\/ la boucle se termine quand i = (dernier-1).\n si T[i] <= T[dernier] alors\n \u00e9changer T[i] et T[j]\n j := j + 1\n fin_si\n fin_pour\n \u00e9changer T[dernier] et T[j]\n renvoyer j\nfin_partitionner\n\ntri_rapide(tableau T, entier premier, entier dernier)\n si premier < dernier alors\n pivot := choix_pivot(T, premier, dernier)\n pivot := partitionner(T, premier, dernier, pivot)\n tri_rapide(T, premier, pivot-1)\n tri_rapide(T, pivot+1, dernier)\n fin_si\nfin_tri_rapide<\/pre>\n\n\n\nLa complexit\u00e9 de cet algorithme est lin\u00e9arithmique (O(n log n)). L’espace m\u00e9moire utilis\u00e9 est aussi faible.<\/p>\n\n\n\n
Le tri fusion<\/h3>\n\n\n\n \ud83d\udc49 Le tri fusion consiste \u00e0 fusionner 2 listes en les triant. Puis, recommencer cela de mani\u00e8re it\u00e9rative de mani\u00e8re \u00e0 fusionner d\u2019abord les valeurs une \u00e0 une, puis deux \u00e0 deux\u2026 \ud83d\udd00<\/strong><\/p>\n\n\n\nVoici son pseudo-code :<\/p>\n\n\n\n
fonction triFusion(Tableau T)\n si n \u2264 1\n renvoyer T\n sinon\n renvoyer fusion(triFusion(T[1, \u2026, n\/2]), triFusion(T[n\/2 + 1, \u2026, n]))\n fin_si_sinon\nfin_triFusion\n\n\nfonction fusion(Tableau A, Tableau B)\n si A est le tableau vide\n renvoyer B\n si B est le tableau vide\n renvoyer A\n si A[1] \u2264 B[1]\n renvoyer A[1] \u2295 fusion(A[2, \u2026, a], B)\n sinon\n renvoyer B[1] \u2295 fusion(A, B[2, \u2026, b])\n fin_si_sinon\nfin_fusion<\/pre>\n\n\n\nIl poss\u00e8de aussi une complexit\u00e9 lin\u00e9arithmique (O(n log n)) mais il a le d\u00e9faut de n\u00e9cessiter un tableau annexe de taille n. Si la m\u00e9moire est restreinte, c\u2019est un inconv\u00e9nient.<\/p>\n\n\n\n
Conclusion sur les algorithmes de tri \ud83d\udeae<\/h2>\n\n\n\n Nous avons vu que de nombreux algorithmes permettent de trier un tableau. Cependant, certains sont plus efficaces que d\u2019autres, car leur complexit\u00e9 est plus faible.<\/p>\n\n\n\n
Sur des petits tableaux, la diff\u00e9rence est minime, mais lorsque ceux-ci poss\u00e8dent plusieurs millions d\u2019\u00e9l\u00e9ments, il devient indispensable de choisir un algorithme ayant une complexit\u00e9 minimale. \ud83e\uddd0<\/strong><\/p>\n\n\n\nSi tu as bien compris ce sujet, n\u2019h\u00e9site pas \u00e0 feuilleter nos autres articles sur des sujets d\u2019informatique !<\/p>\n\n\n
\n \n
\n \n
\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n <\/div>\n \n
\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n
\n \n\n
<\/div>\n <\/div>\n <\/div>\n<\/div>\n \n\n
\n 4.2\/5 - (14 votes) <\/div>\n <\/div>\n","protected":false},"excerpt":{"rendered":"
L\u2019\u00e9tude des algorithmes de tri est un passage oblig\u00e9 pour tous les \u00e9tudiants en informatique. Tu n’as pas (…)<\/p>\n","protected":false},"author":271,"featured_media":167054,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"category":[803,813],"tag":[283],"class_list":["post-190078","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-apprendre-matiere","category-informatique-nsi","tag-tech"],"acf":[],"_links":{"self":[{"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/posts\/190078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/users\/271"}],"replies":[{"embeddable":true,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/comments?post=190078"}],"version-history":[{"count":0,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/posts\/190078\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/media\/167054"}],"wp:attachment":[{"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/media?parent=190078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/category?post=190078"},{"taxonomy":"tag","embeddable":true,"href":"https:\/\/sherpas.com\/blog\/wp-json\/wp\/v2\/tag?post=190078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}