Bubble Algorithme de tri avec Python en utilisant un exemple de liste

Qu'est-ce que la Bubble Trier ?

Bubble Trier est un algorithme de tri utilisรฉ pour trier les รฉlรฉments d'une liste par ordre croissant en comparant deux valeurs adjacentes. Si la premiรจre valeur est supรฉrieure ร  la deuxiรจme valeur, la premiรจre valeur prend la deuxiรจme position de valeur, tandis que la deuxiรจme valeur prend la premiรจre position de valeur. Si la premiรจre valeur est infรฉrieure ร  la deuxiรจme valeur, aucun รฉchange n'est effectuรฉ.

Ce processus est rรฉpรฉtรฉ jusqu'ร  ce que toutes les valeurs d'une liste aient รฉtรฉ comparรฉes et รฉchangรฉes si nรฉcessaire. Chaque itรฉration est gรฉnรฉralement appelรฉe une passe. Le nombre de passes dans un tri ร  bulles est รฉgal au nombre d'รฉlรฉments dans une liste moins un.

Dans ce nouvel article concernant notre nouveau projet Bubble Tri dans Python tutoriel tu vas apprendre:

Mettre en ล“uvre le Bubble Algorithme de tri

Nous dรฉcomposerons l'implรฉmentation en trois (3) รฉtapes, ร  savoir le problรจme, la solution et l'algorithme que nous pouvons utiliser pour รฉcrire du code pour n'importe quel langage.

Le problรจme

Une liste d'articles est donnรฉe dans un ordre alรฉatoire et nous souhaitons les organiser de maniรจre ordonnรฉe.

Considรฉrez la liste suivante :

[21,6,9,33,3]

La solution

Parcourez la liste en comparant deux รฉlรฉments adjacents et en les รฉchangeant si la premiรจre valeur est supรฉrieure ร  la deuxiรจme valeur.

Le rรฉsultat devrait รชtre le suivant :

[3,6,9,21,33]

Algorithme

L'algorithme de tri ร  bulles fonctionne comme suit

ร‰tape 1) Obtenez le nombre total d'รฉlรฉments. Obtenez le nombre total d'รฉlรฉments dans la liste donnรฉe

ร‰tape 2) Dรฉterminez le nombre de passes extรฉrieures (n โ€“ 1) ร  effectuer. Sa longueur est de liste moins un

ร‰tape 3) Effectuez des passes internes (n โ€“ 1) fois pour la passe externe 1. Obtenez la valeur du premier รฉlรฉment et comparez-la avec la deuxiรจme valeur. Si la deuxiรจme valeur est infรฉrieure ร  la premiรจre valeur, รฉchangez les positions

ร‰tape 4) Rรฉpรฉtez les passes de lโ€™รฉtape 3 jusquโ€™ร  atteindre la passe extรฉrieure (n โ€“ 1). Obtenez l'รฉlรฉment suivant de la liste, puis rรฉpรฉtez le processus effectuรฉ ร  l'รฉtape 3 jusqu'ร  ce que toutes les valeurs aient รฉtรฉ placรฉes dans leur ordre croissant correct.

ร‰tape 5) Renvoie le rรฉsultat lorsque toutes les passes ont รฉtรฉ effectuรฉes. Renvoie les rรฉsultats de la liste triรฉe

ร‰tape 6) Optimiser l'algorithme

ร‰vitez les passes internes inutiles si la liste ou les valeurs adjacentes sont dรฉjร  triรฉes. Par exemple, si la liste fournie contient dรฉjร  des รฉlรฉments qui ont รฉtรฉ triรฉs par ordre croissant, nous pouvons alors rompre la boucle plus tรดt.

Optimisรฉ Bubble Algorithme de tri

Par dรฉfaut, l'algorithme de tri ร  bulles dans Python compare tous les รฉlรฉments de la liste, que la liste soit dรฉjร  triรฉe ou non. Si la liste donnรฉe est dรฉjร  triรฉe, comparer toutes les valeurs est une perte de temps et de ressources.

L'optimisation du tri ร  bulles nous aide ร  รฉviter les itรฉrations inutiles et ร  รฉconomiser du temps et des ressources.

Par exemple, si les premier et deuxiรจme รฉlรฉments sont dรฉjร  triรฉs, il nโ€™est pas nรฉcessaire de parcourir le reste des valeurs. L'itรฉration est terminรฉe et la suivante est lancรฉe jusqu'ร  ce que le processus soit terminรฉ comme indiquรฉ ci-dessous. Bubble Exemple de tri.

L'optimisation se fait en suivant les รฉtapes suivantes

ร‰tape 1) Crรฉez une variable d'indicateur qui surveille si un รฉchange a eu lieu dans la boucle interne

ร‰tape 2) Si les valeurs ont permutรฉ leurs positions, passez ร  l'itรฉration suivante

ร‰tape 3) Si les bรฉnรฉfices nโ€™ont pas changรฉ de position, terminez la boucle interne et continuez avec la boucle externe.

Un tri ร  bulles optimisรฉ est plus efficace car il exรฉcute uniquement les รฉtapes nรฉcessaires et ignore celles qui ne sont pas obligatoires.

Reprรฉsentation visuelle

ร‰tant donnรฉ une liste de cinq รฉlรฉments, les images suivantes illustrent comment le tri ร  bulles parcourt les valeurs lors de leur tri.

L'image suivante montre la liste non triรฉe

Reprรฉsentation visuelle

Premiรจre itรฉration

ร‰tape 1)

Reprรฉsentation visuelle

Les valeurs 21 et 6 sont comparรฉes pour vรฉrifier laquelle est supรฉrieure ร  l'autre.

Reprรฉsentation visuelle

21 est supรฉrieur ร  6, donc 21 prend la position occupรฉe par 6 tandis que 6 prend la position qui รฉtait occupรฉe par 21

Reprรฉsentation visuelle

Notre liste modifiรฉe ressemble dรฉsormais ร  celle ci-dessus.

ร‰tape 2)

Reprรฉsentation visuelle

Les valeurs 21 et 9 sont comparรฉes.

Reprรฉsentation visuelle

21 est supรฉrieur ร  9, on รฉchange donc les positions de 21 et 9

Reprรฉsentation visuelle

La nouvelle liste est maintenant comme ci-dessus

ร‰tape 3)

Reprรฉsentation visuelle

Les valeurs 21 et 33 sont comparรฉes pour trouver la plus grande.

Reprรฉsentation visuelle

La valeur 33 est supรฉrieure ร  21, aucun รฉchange n'a donc lieu.

ร‰tape 4)

Reprรฉsentation visuelle

Les valeurs 33 et 3 sont comparรฉes pour trouver la plus grande.

Reprรฉsentation visuelle

La valeur 33 est supรฉrieure ร  3, on รฉchange donc leurs positions.

Reprรฉsentation visuelle

La liste triรฉe ร  la fin de la premiรจre itรฉration est comme celle ci-dessus

Deuxiรจme itรฉration

La nouvelle liste aprรจs la deuxiรจme itรฉration est la suivante

Reprรฉsentation visuelle

Troisiรจme itรฉration

La nouvelle liste aprรจs la troisiรจme itรฉration est la suivante

Reprรฉsentation visuelle

Quatriรจme itรฉration

La nouvelle liste aprรจs la quatriรจme itรฉration est la suivante

Reprรฉsentation visuelle

Python Exemples

Le code suivant montre comment implรฉmenter le Bubble Algorithme de tri dans Python.

def bubbleSort( theSeq ):
    n = len( theSeq )

    for i in range( n - 1 ) :
        flag = 0

        for j in range(n - 1) :
            
            if theSeq[j] > theSeq[j + 1] : 
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21,6,9,33,3] 

result = bubbleSort(el)

print (result)

Exรฉcution du programme de tri ร  bulles ci-dessus dans Python produit les rรฉsultats suivants

[6, 9, 21, 3, 33]

Explication du code

L'explication du Python Bubble Le code du programme de tri est le suivant

Explication du code

ICI,

  1. Dรฉfinit une fonction bubbleSort qui accepte un paramรจtre theSeq. Le code ne produit rien.
  2. Obtient la longueur du tableau et attribue la valeur ร  une variable n. Le code ne produit rien
  3. Dรฉmarre une boucle for qui exรฉcute l'algorithme de tri ร  bulles (n โ€“ 1) fois. C'est la boucle externe. Le code ne produit rien
  4. Dรฉfinit une variable d'indicateur qui sera utilisรฉe pour dรฉterminer si un รฉchange a eu lieu ou non. Ceci est ร  des fins d'optimisation. Le code ne produit rien
  5. Dรฉmarre la boucle interne qui compare toutes les valeurs de la liste de la premiรจre ร  la derniรจre. Le code ne produit rien.
  6. Utilise l'instruction if pour vรฉrifier si la valeur du cรดtรฉ gauche est supรฉrieure ร  celle du cรดtรฉ droit immรฉdiat. Le code ne produit rien.
  7. Attribue la valeur de theSeq[j] ร  une variable temporelle tmp si la condition est รฉvaluรฉe comme vraie. Le code ne produit rien
  8. La valeur de theSeq[j + 1] est affectรฉe ร  la position de theSeq[j]. Le code ne produit rien
  9. La valeur de la variable tmp est affectรฉe ร  la position theSeq[j + 1]. Le code ne produit rien
  10. La variable flag reรงoit la valeur 1 pour indiquer qu'un รฉchange a eu lieu. Le code ne produit rien
  11. Utilise une instruction if pour vรฉrifier si la valeur de l'indicateur de variable est 0. Le code ne gรฉnรจre rien
  12. Si la valeur est 0, alors nous appelons l'instruction break qui sort de la boucle interne.
  13. Renvoie la valeur de theSeq aprรจs son tri. Le code gรฉnรจre la liste triรฉe.
  14. Dรฉfinit une variable el qui contient une liste de nombres alรฉatoires. Le code ne produit rien.
  15. Attribue la valeur de la fonction bubbleSort ร  un rรฉsultat variable.
  16. Imprime la valeur du rรฉsultat variable.

Bubblles avantages du tri

Voici quelques-uns des avantages de l'algorithme de tri ร  bulles

  • C'est facile ร  comprendre
  • Il fonctionne trรจs bien lorsque la liste est dรฉjร  ou presque triรฉe
  • Il ne nรฉcessite pas de mรฉmoire รฉtendue.
  • Il est facile d'รฉcrire le code de l'algorithme
  • Les besoins en espace sont minimes par rapport aux autres algorithmes de tri.

Bubble tri Inconvรฉnients

Voici quelques-uns des inconvรฉnients de l'algorithme de tri ร  bulles

  • Il ne fonctionne pas bien lors du tri de grandes listes. Cela prend trop de temps et de ressources.
  • Il est principalement utilisรฉ ร  des fins acadรฉmiques et non pour des applications rรฉelles.
  • Le nombre d'รฉtapes nรฉcessaires pour trier la liste est de l'ordre n2

Analyse de la complexitรฉ de Bubble Trier

Il existe trois types de complexitรฉ :

1) Trier la complexitรฉ

La complexitรฉ du tri est utilisรฉe pour exprimer le temps d'exรฉcution et l'espace nรฉcessaire pour trier la liste. Le tri ร  bulles effectue (n โ€“ 1) itรฉrations pour trier la liste oรน n est le nombre total d'รฉlรฉments dans la liste.

2) Complexitรฉ temporelle

La complexitรฉ temporelle du tri ร  bulles est O(n2)

Les complexitรฉs temporelles peuvent รชtre classรฉes comme suit :

  • Pire cas โ€“ cโ€™est ici que la liste fournie est par ordre dรฉcroissant. L'algorithme effectue le nombre maximum d'exรฉcutions qui est exprimรฉ par [Big-O] O(n2)
  • Meilleur cas โ€“ cela se produit lorsque la liste fournie est dรฉjร  triรฉe. L'algorithme effectue le nombre minimum d'exรฉcutions qui est exprimรฉ par [Big-Omega] ฮฉ(n)
  • Cas moyen โ€“ cela se produit lorsque la liste est dans un ordre alรฉatoire. La complexitรฉ moyenne est reprรฉsentรฉe par [Big-theta] โŠ(n2)

3) Complexitรฉ spatiale

La complexitรฉ de l'espace mesure la quantitรฉ d'espace supplรฉmentaire nรฉcessaire pour trier la liste. Le tri ร  bulles ne nรฉcessite qu'un (1) espace supplรฉmentaire pour la variable temporelle utilisรฉe pour รฉchanger les valeurs. Il a donc une complexitรฉ spatiale de O (1).

Rรฉsumรฉ

  • L'algorithme de tri ร  bulles fonctionne en comparant deux valeurs adjacentes et en les รฉchangeant si la valeur de gauche est infรฉrieure ร  la valeur de droite.
  • La mise en ล“uvre dโ€™un algorithme de tri ร  bulles est relativement simple avec Python. Tout ce que vous devez utiliser sont des boucles for et des instructions if.
  • Le problรจme rรฉsolu par lโ€™algorithme de tri ร  bulles consiste ร  prendre une liste alรฉatoire dโ€™รฉlรฉments et ร  la transformer en une liste ordonnรฉe.
  • L'algorithme de tri ร  bulles dans la structure de donnรฉes fonctionne mieux lorsque la liste est dรฉjร  triรฉe car il effectue un nombre minimal d'itรฉrations.
  • L'algorithme de tri ร  bulles ne fonctionne pas bien lorsque la liste est dans l'ordre inverse.
  • Le tri barboteur a une complexitรฉ temporelle de O (n2) et une complexitรฉ spatiale de O (1)
  • Lโ€™algorithme de tri par barboteur est mieux adaptรฉ ร  des fins acadรฉmiques quโ€™ร  des applications du monde rรฉel.
  • Le tri ร  bulles optimisรฉ rend l'algorithme plus efficace en sautant les itรฉrations inutiles lors de la vรฉrification des valeurs dรฉjร  triรฉes.

Rรฉsumez cet article avec :