====== Algorithmes de tri ======
Un algorithme de tri est, en informatique ou en mathématiques, un algorithme qui permet d'organiser une collection d'objets selon un ordre déterminé (Référence [[http://fr.wikipedia.org/wiki/Algorithme_de_tri|wikipedia]]).
Les tris sont intéressants du point de vue de l'apprentissage de l'algorithmique.
===== Tri à bulles =====
* [[wp>fr:Tri_à_bulles|Tri à bulles]]
Adapter en Python le pseudo code proposé. La représentation du déroulement du tri est également intéressante à développer.
===== Quicksort =====
Version récursive de l'algorithme, avec un pivot arbitraire.
#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
Code compact de la fonction quicksort. Exemple de tri d'éléments entiers.
"""
def quicksort(li):
if li == []: return []
pivot = li[0]
equal = [pivot]
lesser = quicksort([x for x in li[1:] if x <= pivot]) # si x < pivot : élimination des doublons
greater = quicksort([x for x in li[1:] if x > pivot])
return lesser + equal + greater
from numpy import random
a=random.randint(0,1000,10)
print(a,len(a))
b=quicksort(a)
print(b,len(b))
On peut aussi rendre la fonction encore plus compacte, mais moins lisible :
...
def quicksort(li):
if li == []: return []
pivot = li[0]
return quicksort([x for x in li[1:] if x <= pivot]) + [pivot] + quicksort([x for x in li[1:] if x > pivot])
...
Variante avec choix aléatoire du pivot (en fait de son index dans la numérotation de la liste) :
...
pivot_index = randrange(len(li))
pivot = li[pivot_index]
...
Références :
* [[http://stackoverflow.com/questions/18262306/quick-sort-with-python]]
* [[wp>Quicksort|Wikipedia en]] et [[wp>fr:Tri_rapide|Wikipedia fr]]
===== Comparaison des tris =====
L'efficacité des tris peut être comparée suivant la configuration des données initiales (avant tri) et leur nombre. Voir par exemple sur le site [[http://www.sorting-algorithms.com/|www.sorting-algorithms.com]], ou cette vidéo :
{{ https://pbs.twimg.com/tweet_video/CZWNISuWkAEwE3q.mp4?600 }}
Cf. aussi cette autre visualisation : [[https://www.makeartwithpython.com/blog/visualizing-sort-algorithms-in-python/|Sorting Algorithms Visualized in Python]], Using Python 3 and Scikit-Image
| {{ https://s3-us-west-2.amazonaws.com/makeartwithpython/bubble_s.gif }} | {{ https://s3-us-west-2.amazonaws.com/makeartwithpython/heap_s.gif }} | {{ https://s3-us-west-2.amazonaws.com/makeartwithpython/quick_s.gif }} |
===== Algorithmes inefficaces =====
* [[wp>fr:Tri_stupide|Tri stupide]] (bogo sort)
===== Références =====
* Sources de codes (qualité à vérifier) [[https://github.com/thecodershub/algorithms/tree/master/python/sort]]
* [[https://realpython.com/sorting-algorithms-python/|Sorting Algorithms in Python]] Santiago Valdarrama, Real Python