Mir ist aufgefallen dass praktisch alle Quell- / Pseudocodes von Quicksort, die man im Internet und teilweise auch in Fachliteratur finden kann, den gleichen fatalen Fehler haben: Sie geraten unweigerlich in eine Endlosschleife, wenn es mindestens zwei identische Werte im Array gibt. Dieser Fehler kann nur dadurch behoben werden, indem man die rechte Teilung (>= Pivot) immer dann noch einmal teilt, wenn sich "i" nach der ersten Teilung, immer noch auf der Position "L" befindet. Pivot behält hierfür seinen vorherigen Wert und nun wird alles was mit Pivot identisch ist links und alles was größer ist, rechts angeordnet. Anschließend braucht dann nur die rechte Seite als neue Rekursion gestartet zu werden. Hier das entsprechende Codebeispiel des "abgesicherten Quicksort": Sub Quicksort(L, R) If R - L < 1 Then Exit Sub i = L j = R p = Daten(L + Int((R - L) / 2)) Do If Daten(i) < p Then i = i + 1 If Daten(j) >= p Then j = j - 1 If Daten(i) >= p And Daten(j) < p And i < j Then TEMP = Daten(i) Daten(i) = Daten(j) Daten(j) = TEMP i = i + 1 j = j - 1 End If Loop Until i > j If L < i - 1 Then Call Quicksort(L, i - 1) If j + 1 < R Then If L < i Then Call Quicksort(j + 1, R) Else j = R Do If Daten(i) = p Then i = i + 1 If Daten(j) > p Then j = j - 1 If Daten(i) > p And Daten(j) = p And i < j Then TEMP = Daten(i) Daten(i) = Daten(j) Daten(j) = TEMP i = i + 1 j = j - 1 End If Loop Until i > j If j + 1 < R Then Call Quicksort(j + 1, R) End If End If End Sub -- 14:31, 29. Jan. 2023 (CET)