Was ist der schnellste Weg (zumindest theoretisch) einen Haufen zu sortieren?

StackOverflow https://stackoverflow.com/questions/113991

  •  02-07-2019
  •  | 
  •  

Frage

Ein Heap ist eine Liste, in der gilt:

l[i] <= l[2*i] && l[i] <= [2*i+1]

für 0 <= i < len(list)

Ich suche in-Place-Sortierung.

War es hilfreich?

Lösung

Nun sind Sie auf halbem Weg durch einen Heap Sort bereits, indem Sie Ihre Daten in einem Haufen mit. Sie müssen nur den zweiten Teil des Haufens Sortieralgorithmus implementieren. Dies sollte schneller sein als quicksort auf dem Heap-Array verwendet wird.

Wenn Sie mutig sind Sie gehen an der Umsetzung Smoothsort haben könnte , die schneller als Heapsort für fast sortierten Daten.

Andere Tipps

Just heap-Art verwenden. Es ist an Ort und Stelle. Das wäre die natürlichste Wahl.

Sie können auch einfach Ihre Haufen wie es verwenden und es mit einem anderen Algorithmus sortieren. Danach Sie Ihre Haufen aus der sortierten Liste neu zu bauen. Quicksort ist ein guter Kandidat, weil Sie sicher sein, kann es nicht im schlimmsten Fall O (n²), um nur weil Ihre Haufen laufen bereits sortiert vor-.

Das kann schneller sein, wenn Ihre Vergleichs- Funktion teuer ist. Heap-Art neigt dazu, die Vergleichs-Funktion sehr oft zu bewerten.

Sortieranlagen einen Haufen an Ort und Stelle Art von klingt wie ein Job für Heap Sort .

Ich gehe davon aus Speicher beschränkt ist, eine eingebettete Anwendung, vielleicht?

Da Sie bereits einen Haufen haben, konnte nicht Sie verwenden nur die zweite Phase der heap sort ? Es arbeitet an Ort und Stelle und soll schön und effizient sein.

In-Place-Sortierung, folgt der schnellste Weg. Hüten Sie sich vor Off-by-one Fehler in meinem Code. Beachten Sie, dass diese Methode eine umgekehrte sortierte Liste gibt, die im letzten Schritt seitenrichtigem werden muss. Wenn Sie ein Max-Heap verwenden, geht dieses Problem weg.

Die allgemeine Idee ist ein sauberer ein: swap des kleinste Element (bei Index 0) mit dem letzten Elemente in der Halde, Blase, dass das Element nach unten, bis die Heap-Eigenschaft wieder hergestellt wird, schrumpft die Größe des Haufens durch eine und wiederholen.

Dies ist nicht der absolute schnellste Weg für Nicht-in-Place als David Mackay Sortierung demonstriert

Lesen Sie die Artikel aus der Spitze des Haufens eins nach dem anderen. Im Grunde, was Sie haben, dann ist der Stapelsortier.

scroll top