Als Rekursionstiefe die maximale Anzahl der aufeinanderfolgenden rekursiven Aufrufe vor QuickSort trifft seine Basis-Fall, und beachten Sie, dass es (Zufallsvariable) ist eine zufällige Variable, da es von der gewählten Drehpunkt abhängt.QuickSort Schätzung der Rekursionstiefe
Was ich möchte, ist die Schätzung der minimal möglichen und maximal möglichen Rekursionstiefe von QuickSort.
Das folgende Verfahren beschreibt die Art und Weise, das ist QuickSort normalerweise implementiert:
QUICKSORT(A,p,r)
if p<r
q ← PARTITION(A,p,r)
QUICKSORT(A,p,q−1)
QUICKSORT(A,q+1,r)
return A
PARTITION(A,p,r)
x←A[r]
i←p−1
for j ←p to r−1
if A[j] ≤ x
i ← i +1
exchange A[i] ↔ A[j]
exchange A[i +1] ↔ A[r]
return i +1
Der zweite rekursiven Aufruf in QuickSort ist nicht wirklich notwendig; Dies kann durch Verwendung einer iterativen Kontrollstruktur vermieden werden. Diese Technik wird auch Endrekursion genannt, und es kann wie implementiert werden:
QUICKSORT_tail(A,p,r)
while p<r
q ← PARTITION(A,p,r)
QUICKSORT(A,p,q−1)
p ← q+1
return A
In dieser Version werden die Informationen für das letzte Gespräch ist an der Spitze des Stapels, und die Informationen für den ersten Anruf bei der Boden. Wenn eine Prozedur aufgerufen wird, werden ihre Informationen auf den Stapel geschoben. Wenn es beendet wird, werden seine Informationen abgerufen. Da ich davon ausgehe, dass Array-Parameter durch Zeiger dargestellt werden, benötigt die Information für jeden Prozeduraufruf auf dem Stapel O (1) Stapelspeicherplatz. Ich glaube auch, dass der maximal mögliche Stack-Platz bei dieser Version θ (n) sein sollte.
Also, wie kann ich nach all diesen Aussagen die minimal mögliche und maximal mögliche Rekursionstiefe jeder QuickSort-Version schätzen? Habe ich Recht in der obigen Schlussfolgerung?
Vielen Dank im Voraus.
@ 500-InternalServerError: mich korrigieren, wenn ich falsch bin, aber ich bin ziemlich sicher, dass dieser Quicksort keinen "bail if some stored" -Mechanismus enthält, so dass der beste Fall eine Tiefe von 'ciel (log (n))' ist –