Aller au contenu

Algos de tris ♻️⚓︎

Comparaison des Tris⚓︎

image

Tri par insertion⚓︎

Tri par insertion

Fonction qui prend comme paramètre une liste et trie cette liste en place (c'est-à-dire que la liste initiale est modifiée) en utilisant l'algorithme de tri par insertion. Plusieurs versions proposées .

Tri en place, itératif

🐍 Script Python
def insere(donnees, indice):
    """insere la donnee d'indice indice à sa bonne place dans la liste formée des
    éléments d'indice inférieur ou égaux à indice.
    Le début de la liste est sensé être trié.
    LA MODIFICATION SE FAIT EN PLACE

    param :
        donnees : list
        indice : int

    exemple :
    >>> a = [3, 9, 5, 6, 4, 1]
    >>> insere(a, 2)
    >>> a
    [3, 5, 9, 6, 4, 1]

    """
    while indice>0 and donnees[indice]<donnees[indice-1]:
        donnees[indice-1], donnees[indice] = donnees[indice], donnees[indice-1]
        indice = indice -1

def tri_insertion(donnees):
    """tri la liste données en place, avec l'algorithme de tri par insertion
    LE TRI SE FAIT EN PLACE.

    param :
        donnees : list

    exemple :
    >>> liste3 = [ "ruby", "python", "logo", "elan", "rust"]
    >>> tri_insertion(liste3)
    >>> liste3
    ['elan', 'logo', 'python', 'ruby', 'rust']

    """
    for ind in range(len(donnees)):
        insere(donnees,ind)

Tri itératif qui renvoie une nouvelle liste

🐍 Script Python
def insere2(liste, valeur):
    """Insère la valeur dans la liste, supposée triée. la modification est en place

    param :
        liste : list : liste de nombres
        valeur : float/int
        return :
            list : nouvelle liste avec la valeur insérée

    Exemple:
        >>> liste1 = [3,5.2,6]
        >>> insere2(liste1, 4)
        >>> liste1
        [3, 4, 5.2, 6]
        """
    liste.append(valeur)
    indice = len(liste)-1
    while indice>0 and liste[indice-1] > liste[indice]:
        liste[indice],liste[indice-1] = liste[indice-1],liste[indice]
        indice = indice - 1


def tri_insertion2(liste):
    """renvoie une nouvelle liste qui est une version triée de liste

     param :
            liste : list
    return :
            liste

    Exemple :
        >>> tri_insertion2([8,2,6,5])
        [2, 5, 6, 8]
        """
    liste_triee = []
    for element in liste:
        insere2(liste_triee, element)
    return liste_triee

Tri récursif qui renvoie une nouvelle liste

🐍 Script Python
def insere3(liste, valeur):
"""Insère la valeur dans la liste, supposée triée

    param :
        liste : list : liste de nombres
           valeur : float/int
    return :
         list : nouvelle liste avec la valeur insérée

    Exemple:
        >>> liste1 = [3,5.2,6]
        >>> liste2 = insere3(liste1, 4)
        >>> liste2
        [3, 4, 5.2, 6]
"""
    if liste == []:
        return [valeur]
    elif liste[-1]>valeur:
        return insere3(liste[:-1],valeur) + [liste[-1]]
    else:
        return liste + [valeur]

 def tri_recursif_insertion3(liste):
"""renvoie une nouvelle liste qui est une version triée de liste. Méthode récursive.

    param :
        liste : list
    return :
        liste

    Exemple :
    >>> tri_recursif_insertion3([8,2,6,5])
        [2, 5, 6, 8]
 """
    if liste == []:
        return []
    else:
        return insere3(tri_recursif_insertion3(liste[:-1]),liste[-1])

Tri par sélection⚓︎

Tri par sélection

Fonction qui renvoie la liste triée par ordre croissant.

🐍 Script Python
def index_min(donnees, indice):
    """retourne l'indice du plus petit élément d'une liste, à partir d'un indice donné
    Exemple:  
    >>> index_min(["curl", "bash", "python", "cilk", "nesl"], 0)
    1
    >>> index_min(["curl", "bash", "python", "cilk", "nesl"], 2)
    3 
    """
    pos = indice
    for i in range(indice, len(donnees)):
        if donnees[i]<donnees[pos] :
            pos = i
    return pos

def tri_selection(donnees):
    """tri la liste donnees en place, avec l'algorithme de tri par sélection
    >>> liste3 = [ "ruby", "python", "logo", "elan", "rust"]
    >>> tri_selection(liste3)
    >>> liste3
    ['elan', 'logo', 'python', 'ruby', 'rust'] 
    """
    for i in range(len(donnees)-1):
        j = index_min(donnees,i)
        donnees[i], donnees[j] = donnees[j], donnees[i]

Tri fusion⚓︎

Algorithme de tri fusion (merge sort) ❤️ ❤️ ❤️
🐍 Script Python
def interclassement(lst1, lst2):
    lst_totale = []
    n1, n2 = len(lst1), len(lst2)
    i1, i2 = 0, 0
    while i1 < n1 and i2 < n2:
        if lst1[i1] < lst2[i2]:
            lst_totale.append(lst1[i1])
            i1 += 1
        else:
            lst_totale.append(lst2[i2])
            i2 += 1
    return lst_totale + lst1[i1:] + lst2[i2:]

def tri_fusion(lst):
    if len(lst) <= 1:
        return lst
    else:
        m = len(lst) // 2
        return interclassement(tri_fusion(lst[:m]), tri_fusion(lst[m:]))