[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