Pour expliquer pourquoi votre script ne fonctionne pas pour le moment, je renommerai la variable unsorteden sorted.
Au début, votre liste n'est pas encore triée. Bien sûr, nous nous sommes mis sortedà False.
Dès que nous démarrons la whileboucle, nous supposons que la liste est déjà triée. L'idée est la suivante: dès que l'on trouve deux éléments qui ne sont pas dans le bon ordre, on se sortedremet False. sortedne restera True que s'il n'y avait pas d'éléments dans le mauvais ordre .
sorted = False # We haven't started sorting yet
while not sorted:
sorted = True # Assume the list is now sorted
for element in range(0, length):
if badList[element] > badList[element + 1]:
sorted = False # We found two elements in the wrong order
hold = badList[element + 1]
badList[element + 1] = badList[element]
badList[element] = hold
# We went through the whole list. At this point, if there were no elements
# in the wrong order, sorted is still True. Otherwise, it's false, and the
# while loop executes again.
Il existe également de petits problèmes mineurs qui aideraient le code à être plus efficace ou plus lisible.
Dans la forboucle, vous utilisez la variable element. Techniquement, ce elementn'est pas un élément; c'est un nombre représentant un index de liste. De plus, c'est assez long. Dans ces cas, utilisez simplement un nom de variable temporaire, comme ipour "index".
for i in range(0, length):
La rangecommande peut également prendre un seul argument (nommé stop). Dans ce cas, vous obtenez une liste de tous les entiers de 0 à cet argument.
for i in range(length):
Le Guide de style Python recommande que les variables soient nommées en minuscules avec des traits de soulignement. C'est un petit pinaillage pour un petit script comme celui-ci; il s'agit davantage de vous habituer à ce à quoi ressemble le plus souvent le code Python.
def bubble(bad_list):
Pour permuter les valeurs de deux variables, écrivez-les sous forme d'affectation de tuple. Le côté droit est évalué comme un tuple (disons, (badList[i+1], badList[i])est (3, 5)) puis est assigné aux deux variables du côté gauche ( (badList[i], badList[i+1])).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Mettez tout cela ensemble, et vous obtenez ceci:
my_list = [12, 5, 13, 8, 9, 65]
def bubble(bad_list):
length = len(bad_list) - 1
sorted = False
while not sorted:
sorted = True
for i in range(length):
if bad_list[i] > bad_list[i+1]:
sorted = False
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
bubble(my_list)
print my_list
(Au fait, j'ai également supprimé votre déclaration imprimée.)