2016-03-26 12 views
-1

Ich schrieb einen einfachen Quicksort, aber ich habe Probleme damit.QuickSort - RuntimeError: maximale Rekursionstiefe überschritten

def partition(A, p, r): 
    x = A[r] 
    i = p 
    j = r 
    while True: 
     while A[i] < x: 
      i+=1 
     while x < A[j]: 
      j-=1 
     if i < j: 
      A[i], A[j] = A[j], A[i] 
      i += 1 
      j -= 1 
     else: 
      return j 

def quickSort(A, p, r): 
    if p<r: 
     q = partition(A, p, r) 
     quickSort(A, p, q-1) 
     quickSort(A, q+1, r) 

def quickSortMainReq(A): 
    quickSort(A, 0, len(A)-1) 
    return A 

Alles ist gut, bis Sie keine große Array haben. Zum Beispiel funktioniert print quickSortMainReq(range(994)) funktioniert. print quickSortMainReq(range(995)) ist nicht. Wenn ich mein x auf [(p + r) // 2] setze, funktioniert es, aber ich muss den rechten Drehpunkt verwenden Ich habe keine Ahnung warum. Es sollte für alle funktionieren.

+2

Bitte sehen Sie diese Frage einen Blick auf meine kleine, ehrfürchtige Beispiel nehmen: http://stackoverflow.com/questions/27116255/python-quicksort-maximum-recursion- Tiefe – manglano

+0

Willkommen bei SO! Erklären Sie genau, was arbeiten und nicht arbeiten bedeutet. – J0e3gan

Antwort