QuickSort Dijkstra 3-Wege-Partitionierung: Warum extra tauschen?

In Anbetracht des Algorithmus hier, schauen Sie sich das Szenario an, in dem ich bei "X" bin, passiert Folgendes:

Szenario: i -> "X", "X"> "P"

1. swap("X", "Z"), gt--;   // the value at i is now "Z", which is still > "P"
2. swap("Z", "Y"), gt--;   // the value at i is now "Y", which is still > "P"
3. swap("Y", "C"), gt--;    // Now we finally get a value at i "C" which is < "P"
// Now we can swap values at i and lt, and increrement them
4. swap("P", "C"), i++, lt++;

Warum dekrementieren wir nicht einfach gt, bis gt auf einen Wert <dem Wert bei lt ("P" in diesem Fall) zeigt, und tauschen diesen Wert dann mit dem Wert bei i aus. Dies spart Austauschoperationen.

Wenn wir das für das oben erwähnte Szenario machen, machen wir:

1. gt--
2. gt--
3. swap("X", "C"), gt--;   
// Now we can swap values at i and lt, and increrement them
4. swap("P", "C"), i++, lt++;

Ist dieser übermäßige Austausch für den Algorithmus erforderlich? verbessert es die Leistung in irgendeiner Weise? Wenn es die Leistung verbessert, wie?

Wenn dies die Leistung nicht beeinträchtigt, geben Sie bitte eine angemessene Erklärung oder einen Beweis dafür, warum dies die Leistung nicht beeinträchtigt.

Würde die zweite Methode, die ich erwähnte, die Leistung in irgendeiner Weise beeinflussen? bitte erkläre warum.

P.S. "Leistung beeinflussen", wie oben verwendet, bedeutet, dass die Leistung entweder verbessert oder verschlechtert wird.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage