¿Por qué el algoritmo no funciona de esta manera? A veces me sale IndexError: list assignment index out of range, y cuando no, me devuelv...

Juan Cruz Stakys

Juan Cruz Stakys

Pregunta
studenthace 4 años

¿Por qué el algoritmo no funciona de esta manera?

A veces me sale IndexError: list assignment index out of range, y cuando no, me devuelve una lista mucho más larga y con elementos repetidos que no corresponden.

def merge_sort(lista): if len(lista) > 1: #Divide la lista en 2 sublistas izquierda = lista[:len(lista)//2] derecha = lista[len(lista)//2:] print(izquierda, '*' * 5, derecha) #Ordeno cada sublista con recursion merge_sort(izquierda) merge_sort(derecha) #Define los iteradores que van a atravesar la lista izquierda, la derecha y la resultante i = 0 d = 0 r = 0 #Compara el primer elemento de cada una de las listas hasta haber atravesado todos los elementos de alguna lista while i < len(izquierda) and d < len(derecha): if izquierda[i] < derecha[d]: lista[r] = izquierda[i] i += 1 else: lista[r] = derecha[d] d += 1 r += 1 # while i < len(izquierda): # lista[r] = izquierda[i] # i += 1 # r +=1 # while d < len(derecha): # lista[r] = derecha[d] # d += 1 # r +=1 if i < len(izquierda): lista[r:] += izquierda[i:] else: lista[r:] += derecha[d:] print(f'izquierda {izquierda}, derecha {derecha}') print(lista) print('-' * 50) return lista```
1 respuestas
para escribir tu comentario
    Clayton Jhordan Iliquin Zavaleta

    Clayton Jhordan Iliquin Zavaleta

    studenthace 4 años

    El problema está en estas lineas de código:

    if i < len(izquierda): lista[r:] += izquierda[i:] else: lista[r:] += derecha[d:]

    Estas están reemplazando a las que se vio en el algoritmo:

    while i < len(izquierda): lista[r] = izquierda[i] i += 1 r +=1 while d < len(derecha): lista[r] = derecha[d] d += 1 r +=1

    Ya que estas son la que hacen que los últimos valores que quedan en las sublistas se añadan a la lista final que te regresa los valores ordenados.

Curso de POO y Algoritmos con Python

Curso de POO y Algoritmos con Python

Comprende la eficiencia algorítmica con Python. Analiza complejidad temporal y espacial, visualiza resultados y resuelve problemas de optimización. Ideal para desarrollar habilidades esenciales en el análisis de algoritmos.

Curso de POO y Algoritmos con Python
Curso de POO y Algoritmos con Python

Curso de POO y Algoritmos con Python

Comprende la eficiencia algorítmica con Python. Analiza complejidad temporal y espacial, visualiza resultados y resuelve problemas de optimización. Ideal para desarrollar habilidades esenciales en el análisis de algoritmos.