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<div>
<br></div><div><div>from clase_ref import referencia_ent</div><div>from clase_ref import leer</div><div>import sys</div><div><br></div><div>def qsort1(lista,contador):</div><div> if lista == []: </div><div> return []</div>
<div> else:</div><div> contador.anadir(len(lista) - 1)</div><div> #pivot = lista.pop(len(lista)-1)</div><div> pivot = mediana(lista)</div><div> assert isinstance(pivot,int)</div><div> lesser = qsort1([l for l in lista if l < pivot],contador)</div>
<div> greater = qsort1([l for l in lista if l >= pivot],contador)</div><div> return lesser + [pivot] + greater</div><div> return qsort1(lista[:])</div><div>def mediana(lista):</div><div> if len(lista) >= 3:</div>
<div> lista_aux = []</div><div> lista_aux.append(lista[0])</div><div> lista_aux.append(lista[-1])</div><div> lista_aux.append(lista[len(lista)//2])</div><div> lista_aux.sort()</div><div>
assert len(lista_aux) == 3</div><div> return lista_aux[1]</div><div> elif len(lista) == 2:</div><div> return (lista[0] + lista[1])/2</div><div> else:</div><div> return lista[0]</div><div>
def main1():</div><div> sys.setrecursionlimit(300000)</div><div> contador = referencia_ent()</div><div> lista = leer()</div><div> #print lista</div><div> qsort1(lista,contador)</div><div> print contador</div>
<div> #print lista2</div><div>if __name__ == "__main__":</div><div> sys.settrace(main1())</div><div><br></div><div>Si ustedes me pueden ayudar se los agradeceré.</div><div><br></div><div>PD: El referencia_ent() es un objeto que sirve como contador (Para contar las comparaciones, aunque todavía no he implementado su uso)</div>
<div><br></div>-- <br><div>Asdrúbal Iván Suárez Rivera<br></div><br><i>El éxito de alguien que enseña no es que sepa mucho, sino que lo poco que sabe lo sepa hacer llegar.</i><br><br>
</div>