Quicksort Aufruf

Mariexshhx

Bekanntes Mitglied
Hallo die Zahlenfolge 4,7,1,3,2,0,5,6 soll sortiert werden und es soll immer vor jeden rekursiven Aufruf von quicksort(A,l,r) das Array und l, r angegeben werden. ich verstehe hierbei 3 Aufrufe nicht... und zwar einmal bei l:2 und r:1 wieso findet dieser Auruf statt vorher ist doch l:0 und r:0 und normal bricht doch Qucksort nach Zeile dann hier ab. Selbes gilt für l:7 r:6... hier wird vorher mit l:5 und r:5 aufgerufen

1676286488920.png
 

Anhänge

  • Bildschirm­foto 2023-02-13 um 12.12.03.png
    Bildschirm­foto 2023-02-13 um 12.12.03.png
    248,7 KB · Aufrufe: 3

Mariexshhx

Bekanntes Mitglied
Java:
function partition (A , l , r ) :
2 # W ä hle A [ l ] als Pivotelement und suche die Position f ü r A [ l ]
3 # in A [ l ... r ]
4 i = l +1; j = r
5 while True :
6 # Invariante : Alle Elemente in A [ l +1... i -1] sind <= A [ l ];
7 # alle Elemente in A [ j +1... r ] sind >= A [ l ].
8
9 while i < r and A [ i ] <= A [ l ] :
10 i ++
11
12 while j > l and A [ j ] >= A [ l ] :
13 j - -
14
15 # Stoppe , wenn wir gesamtes Array durchsucht haben .
16 if i >= j :
17 break
18
19 # A [ i ] und A [ j ] in falscher Arrayh ä lfte ; vertausche
20 # und bewege Zeiger zum n ä chsten Element
21 swap ( A [ i ] , A [ j ])
22 i ++; j - -
23
24 # Tausche Pivotelement in korrekte Position und gib
25 # Pivotposition zur ü ck .
26 swap ( A [ l ] , A [ j ])
27 return j
 

Mariexshhx

Bekanntes Mitglied
Java:
function partition (A , l , r ) :
2 # W ä hle A [ l ] als Pivotelement und suche die Position f ü r A [ l ]
3 # in A [ l ... r ]
4 i = l +1; j = r
5 while True :
6 # Invariante : Alle Elemente in A [ l +1... i -1] sind <= A [ l ];
7 # alle Elemente in A [ j +1... r ] sind >= A [ l ].
8
9 while i < r and A [ i ] <= A [ l ] :
10 i ++
11
12 while j > l and A [ j ] >= A [ l ] :
13 j - -
14
15 # Stoppe , wenn wir gesamtes Array durchsucht haben .
16 if i >= j :
17 break
18
19 # A [ i ] und A [ j ] in falscher Arrayh ä lfte ; vertausche
20 # und bewege Zeiger zum n ä chsten Element
21 swap ( A [ i ] , A [ j ])
22 i ++; j - -
23
24 # Tausche Pivotelement in korrekte Position und gib
25 # Pivotposition zur ü ck .
26 swap ( A [ l ] , A [ j ])
27 return j
wenn nun l und r 0 und 0 sind wird der erste und zweite schleife nicht mehr durchlaufen weil beide Bedingungen je nicht erfüllt sind oder sehe ich das falsch?
 

Neumi5694

Top Contributor
Ich glaube nicht, dass du im richtigen Forum bist.
Dass abgebrochen wird, wenn beide 0 sind, ist richtig. Aber woher weißt du, dass sie es sind? Wo ist der erste Aufruf?
ps: Deine Funktion ist nicht dokumentiert, keine Beschreibung dafür, welcher Parameter was darstellt. Aus dem Code kann man das zwar ableiten, aber wie will man das von außen sehen?
 

Neue Themen


Oben