Jako głębokość rekurencji, maksymalna liczba kolejnych rekursywnych wywołań, zanim QuickSort trafi w jego bazę bazową, i zauważając, że jest to zmienna losowa, ponieważ zależy od wybranego przestawu.Ocena głębokości rekursji przez QuickSorta
To, czego chcę, to oszacowanie minimalnej możliwej i maksymalnej możliwej głębokości rekursji QuickSort.
Poniższa procedura opisuje sposób ów QuickSort zazwyczaj realizowane:
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
Drugie wywołanie rekurencyjne w Quicksort nie jest to naprawdę konieczne; można tego uniknąć, stosując iteracyjną strukturę kontrolną. Technika ta nazywana jest także ogon rekurencji, a to może być realizowane następująco:
QUICKSORT_tail(A,p,r)
while p<r
q ← PARTITION(A,p,r)
QUICKSORT(A,p,q−1)
p ← q+1
return A
W tej wersji, informacje o ostatniej rozmowy jest na górze stosu, a informacja o wstępnej rozmowy jest dół. Gdy procedura jest wywoływana, jej informacje są przesyłane na stos; kiedy się kończy, jego informacje zostają zerwane. Ponieważ zakładam, że parametry tablicy są reprezentowane przez wskaźniki, informacja o każdym wywołaniu procedury na stosie wymaga przestrzeni stosu O (1). Uważam także, że maksymalna możliwa przestrzeń stosu w tej wersji powinna być θ (n).
Po tym wszystkim, jak mogę oszacować minimalną możliwą i maksymalną możliwą głębokość rekursji każdej wersji QuickSort? Czy mam rację w powyższym wnioskowaniu?
Z góry dziękuję.
@ 500-InternalServerError: Popraw mnie jeśli się mylę, ale jestem jestem pewien, że ten quicksort nie zawiera mechanizmu "kaucja, jeśli jest już posortowany", czyniąc najlepszy przypadek głębokością "ciel (log (n))" –