Por que me marca list index out of range?

publicado por: Anonymous

puede alguien decirme que error tengo en mi codigo si no es mucha molestia.

def CreaLista(k):
    L = []
    for i in range(k+1):
        L.append(0)
    return L

def CountingSort(A,k):
    C=CreaLista(k)
    B=CreaLista(len(A)-1)
    for j in range(1, len(A)):
        C[A[j]] = C[A[j]]+1
    for i in range(1, k+1):
        C[i]=C[i]+C[i-1]
    for j in range(len(A)-1,0,-1):
        B[C[A[j]]]=A[j]
        C[A[j]]=C[A[j]]-1
    return B

lista = [0,9,7,81,4,5,68,3,541]
k = len(lista[1:])
CountingSort(lista, k)

Este es el error que me da:

IndexError                                Traceback (most recent call last)
<ipython-input-1-d6ba25f80b3f> in <module>()
     19 lista = [0,9,7,81,4,5,68,3,541]
     20 k = len(lista[1:])
---> 21 CountingSort(lista, k)

<ipython-input-1-d6ba25f80b3f> in CountingSort(A, k)
      9     B=CreaLista(len(A)-1)
     10     for j in range(1, len(A)):
---> 11         C[A[j]] = C[A[j]]+1
     12     for i in range(1, k+1):
     13         C[i]=C[i]+C[i-1]

IndexError: list index out of range

solución

Interpreto que tienes un error de implementación del algoritmo CountingSort. El parámetro k no debería ser el número de elementos de la lista a ordenar, sinó el valor máximo de la lista. En el ejemplo que muestras, el valor máximo de la lista a ordenar es 541. Por lo tanto, deberías cambiar la llamada a la función para que k tome el valor deseado:

lista = [0,9,7,81,4,5,68,3,541]
k = max(lista[1:])  # max() en vez de len()
CountingSort(lista, k)
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *