5.1.4 Funciones – Ordenar una lista numérica con el Método de la burbuja (bubble sort)

Referencia: Rodriguez 7.2.1 p224, ordenamiento de burbuja wikipedia

Se dispone de una lista de la estatura de los estudiantes de una escuela, que para formar fila se requiere ordenar en forma ascendente.

X = [85,75,65,80]

La primera acción a realizar es ubicar al estudiante de menor estatura en la primera posición en la fila. Se puede realizar comparando la estatura X[i], i=0, con las estaturas X[j], j=1, de cada estudiante que se encuentra detrás de él.

X = [85,75,65,80]
      i  j

Si el estudiante estudiante j es de menor estatura, deberá ocupar la posición primera i, asegurando que al menos hasta donde se ha revisado.

X = [75,85,65,80]  # se intercambia
      i  j

Se debe intercambiar los valores entre las posiciones i vs j. El intercambio de posiciones lleva tres pasos:
– primero se aparta al estudiante de la posicion i
– segundo se mueve al estudiante de la posición j para ocupar la posición i
– tercero, es estudiante que se apartó, se le pide que ocupe la posición del estudiante j.
quedando la lista como la mostrada en el ejemplo anterior. Este paso es semejante a una burbuja que «asciende».

if X[j]<X[i]: #intercambia i con j
    aparta = X[i]
    X[i] = X[j]
    X[j] = aparta

Se repite el proceso entre las posiciones i vs j+1, hasta llegar al último estudiante, asegurando que al menos en la posición i, se encuentre el estudiante de menor estatura.

X = [75,85,65,80]
      i     j
X = [65,85,75,80] # se intercambia
      i     j
X = [65,85,75,80] # no es necesario el intercambio
      i        j

Se procede a realizar el análisis con el estudiante i+1, para todos los que se encuentren detras de él, pues todos los anteriores tienen menor estatura.

X = [65,85,75,80] # no es necesario el intercambio
         i  j -->

Instrucciones en Python

# Ordena ascendente, 
# método de la burbuja, Bubble sort
# INGRESO
X = [75,85,65,80]

# PROCEDIMIENTO
n = len(X)
i = 0          # primero de la lista
while i<(n-1): # hasta penúltimo
    j = i+1    # siguiente de i
    while j<n: # hasta el último
        if X[j]<X[i]: #intercambia i con j
            aparta = X[i]
            X[i] = X[j]
            X[j] = aparta
        j = j + 1
    i = i + 1

# SALIDA
print(X)

Tarea: Realizar el algoritmo para ordenar en forma descendente.

Referencias: Obama recuerda aún el algoritmo de Bubble Sort. Dan Siroker (2013)