[Python-es] Segmentation Fault usando Recursión

Asdrúbal Iván Suárez Rivera asdrubal.ivan.suarez.rivera en gmail.com
Lun Abr 2 19:21:57 CEST 2012


Buenas tardes, tengo aquí un problema a la hora de hacer un quicksort
recursivo. Resulta que debo leer un archivo de 10000 elementos (EL cual ya
lo leì), ahora bien, me tira segmentations faults a la hora de correrlo.
Este es el código, sospecho que el problema está en el quicksort

from clase_ref import referencia_ent
from clase_ref import leer
import sys

def qsort1(lista,contador):
    if lista == []:
        return []
    else:
        contador.anadir(len(lista) - 1)
        #pivot = lista.pop(len(lista)-1)
        pivot = mediana(lista)
        assert isinstance(pivot,int)
        lesser = qsort1([l for l in lista if l < pivot],contador)
        greater = qsort1([l for l in lista if l >= pivot],contador)
        return lesser + [pivot] + greater
    return qsort1(lista[:])
def mediana(lista):
    if len(lista) >= 3:
        lista_aux = []
        lista_aux.append(lista[0])
        lista_aux.append(lista[-1])
        lista_aux.append(lista[len(lista)//2])
        lista_aux.sort()
        assert len(lista_aux) == 3
        return lista_aux[1]
    elif len(lista) == 2:
        return (lista[0] + lista[1])/2
    else:
        return lista[0]
def main1():
    sys.setrecursionlimit(300000)
    contador = referencia_ent()
    lista = leer()
    #print lista
    qsort1(lista,contador)
    print contador
    #print lista2
if __name__ == "__main__":
    sys.settrace(main1())

Si ustedes me pueden ayudar se los agradeceré.

PD: El referencia_ent() es un objeto que sirve como contador (Para contar
las comparaciones, aunque todavía no he implementado su uso)

-- 
Asdrúbal Iván Suárez Rivera

*El éxito de alguien que enseña no es que sepa mucho, sino que lo poco que
sabe lo sepa hacer llegar.*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120402/de75ec8a/attachment.html>


Más información sobre la lista de distribución Python-es