Saltar al contenido

Merge sort

Python · Unidad 23: Buscar y ordenar

Mezclar dos listas que ya vienen ordenadas es fácil: miras el primero de cada una, te llevas el más chico y sigues.

Cuando una se acaba, lo que queda de la otra ya está en orden y se pega tal cual al final.

def mezcla(a, b):
    r = []
    while len(a) > 0 and len(b) > 0:
        if a[0] <= b[0]:
            r.append(a.pop(0))
        else:
            r.append(b.pop(0))
    return r + a + b

print(mezcla([2, 5, 9], [1, 6]))

Imprime

[1, 2, 5, 6, 9]

El resto de la explicación está en la lección, que es del plan completo.

Ejercicios de esta lección

Se hacen en la app, que los corrige al momento y explica por qué.

  1. 1. Predice la salida

    ¿Qué imprime este código?

  2. 2. Completa el código

    El while termina cuando una de las dos listas se vacía. ¿Qué falta regresar?

  3. 3. Encuentra el bug

    mezcla debería juntar las dos listas ordenadas y dar [1, 2, 5, 6, 9], pero imprime [2, 5, 9, 1, 6]. ¿Qué línea tiene el error?

  4. 4. Predice la salida

    ¿Qué imprime este código?

  5. 5. Predice la salida

    Esta función parte y vuelve a partir hasta que queda un solo número. ¿Qué imprime?

  6. 6. Completa el código

    Completa la llamada que ordena la segunda mitad.

  7. 7. Opción múltiple

    ¿Para qué sirve el if len(ns) <= 1: return ns del merge sort?

  8. 8. Encuentra el caso que falla

    mezcla(a, b) debería regresar los números de las dos listas ordenadas en una sola, también cuando una de las dos llega vacía. ¿Con qué llamada falla?

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →