Ich habe Probleme bei der Suche gute Ressourcen , die einem schlimmsten Fall geben anstelle stabilem Sortieralgorithmus. Kennt jemand gute Ressourcen?
Nur zur Erinnerung: An der richtigen Stelle wird das übergebene Array verwendet, und der Sortieralgorithmus darf nur konstanten zusätzlichen Speicherplatz belegen. Stabil bedeutet, dass Elemente mit demselben Schlüssel im sortierten Array in derselben Reihenfolge wie im Original angezeigt werden.
Beispielsweise ist die naive Zusammenführungssortierung der schlechteste Fall und stabil, verwendet jedoch zusätzlichen Raum. Standard-Quicksort kann stabil gemacht werden, ist vorhanden, aber der schlimmste Fall ist . Heapsort ist vorhanden, im schlimmsten Fall aber nicht stabil. Wikipedia hat eine schöne Tabelle, welche Sortieralgorithmen welche Nachteile haben. Beachten Sie, dass es keinen Sortieralgorithmus gibt, der alle drei Stabilitätsbedingungen enthält, nämlich den ungünstigsten Fall und vorhanden ist.O ( n ) O ( n 2 ) O ( n ln n ) O ( n ln n )
Ich habe eine Veröffentlichung mit dem Titel "Practical in-place mergesort" von Katajainen, Pasanen und Teuhola gefunden, in der behauptet wird, dass eine stabile Mergesort-Variante mit dem Worst-Case-Wert vorliegt. Wenn ich ihre Ergebnisse richtig verstehe, verwenden sie (Bottom-Up?) Rekursiv eine Mergesort-Methode für das erste des Arrays und das letztere des Arrays und verwenden das zweite als Arbeitsbereich für die Zusammenführung. Ich lese das noch immer durch, daher sind weitere Informationen darüber, ob ich die Ergebnisse richtig interpretiere, sehr willkommen.1 1 1
Ich wäre auch sehr interessiert an einem Worst-Case- anstelle einer stabilen Quicksorte. Soweit ich weiß, erfordert das Ändern von Quicksort in den ungünstigsten Fall die Auswahl eines geeigneten Drehpunkts, der die Stabilität zerstören würde, die er sonst normalerweise genießen würde.O ( n ln n )
Dies ist rein theoretisch interessant und ich habe keine praktische Anwendung. Ich möchte nur den Algorithmus kennen, der alle drei dieser Funktionen hat.