Para explicar por qué su script no funciona en este momento, cambiaré el nombre de la variable unsorted
asorted
.
Al principio, tu lista aún no está ordenada. Por supuesto, nos pusimos sorted
aFalse
.
Tan pronto como comenzamos el while
ciclo, asumimos que la lista ya está ordenada. La idea es esta: en cuanto encontramos dos elementos que no están en el orden correcto, volvemos sorted
a False
. solosorted
permanecerá True
si no hay elementos en el orden incorrecto .
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.
También hay pequeños problemas menores que ayudarían a que el código sea más eficiente o legible.
En el for
ciclo, usas la variable element
. Técnicamente, element
no es un elemento; Es un número que representa un índice de lista. Además, es bastante largo. En estos casos, simplemente use un nombre de variable temporal, como i
"index".
for i in range(0, length):
El range
comando también puede tomar solo un argumento (llamado stop
). En ese caso, obtienes una lista de todos los enteros de 0 a ese argumento.
for i in range(length):
La Guía de estilo de Python recomienda que las variables se nombren en minúsculas con guiones bajos. Este es un pequeño detalle para un pequeño guión como este; es más para acostumbrarte a lo que el código de Python se parece más a menudo.
def bubble(bad_list):
Para intercambiar los valores de dos variables, escríbalas como una asignación de tupla. El lado derecho se evalúa como una tupla (por ejemplo, (badList[i+1], badList[i])
es (3, 5)
) y luego se asigna a las dos variables en el lado izquierdo ( (badList[i], badList[i+1])
).
bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]
Póngalo todo junto y obtendrá esto:
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
(Por cierto, también eliminé tu declaración impresa).