Ich arbeite an einer Algorithmus-Zuweisung, die mich erfordert, um den Fortschritt des schnellen Sortieralgorithmus mit einer Anordnung von gleichen Elementen anzuzeigen (1 (a), 1 (b), 1 (c) usw.), wobei der Drehpunkt das letzte Element im Array ist. Der rekursive Teil des Algorithmus ist das, was mich verwirrt. Bisher habe ich die Progression:Quick-Sort-Algorithmus-Progression mit gleichen Elementen
1(a) 1(b) 1(c) 1(d) [1(e)]
1(a) | 1(b) 1(c) 1(d) 1(e)
1(a) 1(b) | 1(c) 1(d) 1(e)
1(a) 1(b) 1(c) | 1(d) 1(e)
1(a) 1(b) 1(c) 1(d) | 1(e)
Danach wird der Dreh würde 1 (d) würde ich denken, und die Progression wäre das gleiche wie oben, außer mit einem weniger Austausch. Ich bin verwirrt, wie die linken und rechten rekursiven Aufrufe funktionieren. Würden die Elemente auf der "richtigen" Seite des Arrays jemals mit sich selbst ausgetauscht werden? An welchem Punkt würde dieser Algorithmus aufhören? Hier
ist der Pseudo-Code:
QS(A, p, r):
if p < r
q = PARTITION(A, p, r)
QS(A, p, q - 1)
QS(A, q + 1, r)
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] with A[j]
exchange A[i + 1] with A[r]
return i + 1
p ist das erste Element-Array und r ist das letzte Element.
Danke für Ihre Hilfe.
Ihre Frage ist unklar. Sie zeigen keinen Pseudocode. –
Mein Fehler. Habe es einfach hinzugefügt! – tfreiner
Hier sind einige Erklärungen, die helfen könnten: [schnelle Sortierung mit doppelten Elementen] (http://stackoverflow.com/questions/13339227/quick-sort-algorithm-improvement-if-more-duplicate-keys). – Crocode