Corrección de un error en el algoritmo de ordenamiento por mezcla
Te han dado un programa que ordena una lista de números utilizando el algoritmo de ordenamiento por mezcla. Mientras pruebas la función merge_sort()
, te das cuenta de que el código no es correcto. ¿Puedes corregir el algoritmo para que funcione correctamente?
Este ejercicio forma parte del curso
Estructuras de datos y algoritmos en Python
Instrucciones del ejercicio
- Corrige el error al asignar la mitad izquierda.
- Corrige el error al asignar la mitad derecha.
- Corrige el error al actualizar el puntero de la mitad izquierda.
- Corrige el error al actualizar el puntero de la mitad derecha.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
def merge_sort(my_list):
if len(my_list) > 1:
mid = len(my_list)//2
left_half = my_list[:mid]
right_half = my_list[mid:]
merge_sort(left_half)
merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
# Correct mistake when assigning left half
my_list[k] = right_half[i]
i += 1
else:
# Correct mistake when assigning right half
my_list[k] = left_half[j]
j += 1
k += 1
while i < len(left_half):
my_list[k] = left_half[i]
# Correct mistake when updating pointer for left half
j += 1
k += 1
while j < len(right_half):
my_list[k] = right_half[j]
# Correct mistake when updating pointer for right half
i += 1
k += 1
my_list = [35,22,90,4,50,20,30,40,1]
merge_sort(my_list)
print(my_list)