2016-06-06 10 views
-3

Ich habe versucht, hier und da zu finden, was genau in-move merge sort und wo ich es verwenden muss? Aber keine klare Antwort gefunden. Bitte helfen Sie mir, indem Sie unten antworten.In-place Merge sort praktische Verwendung

1) Wann und wo eine direkte Zusammenführung erforderlich ist? Praktische Verwendung von In-Place-Merge.

2) Was passiert, wenn die Eingangsarrays für die In-Place-Zusammenführung nicht sortiert sind?

3) Was isst mehr Speicher zum Sortieren zwischen Merge-Sortierung, In-Place-Merge-Sortierung und Schnell-Sortierung?

Hinweis: Ich frage nach "std :: inplace_merge", das ist ein STL-Algorithmus.

+0

Ich werde so froh sein, wenn Sie hier einen Kommentar hinzufügen, wenn Sie meine Frage Freunde abstimmen. Zumindest sollten Sie eine Chance geben zu wissen, was mit meiner Frage richtig ist. Und wenn möglich, teilen Sie bitte das Material, wenn es eine grundlegende Frage ist, zusammen mit der Abstimmung der Frage. Alles was ich will, ist Konzept. Vielen Dank. –

Antwort

2

1) In-Place-Zusammenführungssortierung wird verwendet, wenn Sie eine Liste in O (nlogn) -Zeit sortieren möchten, während Sie weniger Speicherplatz als Standard-Mergesort verwenden.

2) Der ganze Zweck der Sortierung ist die Sortierung der Eingabearrays, so dass nicht sortierte Eingabearrays nach dem In-Place-Mergesort sortiert werden.

3) Mergesort verwendet mehr Arbeitsspeicher, da es zwei neue Arrays halber Größe für die beiden rekursiven Aufrufe erstellt. In-Place-Merge-Sort und Quick-Sort sollten ungefähr den gleichen Platz einnehmen, da sie beide an Ort und Stelle sind. Für den Mergesort bedeutet Inplace O (log n) extra space aus dem Beibehalten der relevanten Indizes des Arrays der Länge n, nicht der strengsten O (1) Bedeutung von in-place. Quicksort benötigt im schlimmsten Fall O (nlogn) zusätzlichen Platz, da es O (n) rekursive Aufrufe geben kann, von denen jeder Zeiger hat, die Speicherplatz O (logn) einnehmen.

Hoffe, das hilft.

+0

Vorsichtig mit dem Wortlaut, "vor Ort" hat zwei Definitionen. "In seiner strengsten Form kann der Algorithmus nur eine konstante Menge an zusätzlichem Speicherplatz haben, wobei alles gezählt wird, einschließlich Funktionsaufrufen und Zeigern ... Allgemeiner bedeutet" direkt am Platz ", dass der Algorithmus keinen zusätzlichen Platz zum Manipulieren der Eingabe benötigt, aber benötigt ein kleiner, aber nicht konstanter zusätzlicher Platz für seine Operation. Normalerweise ist dieser Raum O (log n), obwohl manchmal alles in o (n) erlaubt ist. " https://en.wikipedia.org/wiki/In-place_algorithm –

+0

@MooingDuck Danke, ich werde meine Antwort bearbeiten, um dies zu reflektieren. – ghui

+0

Quicksort benötigt Log (n) amortisierten zusätzlichen Speicher, O (n) schlimmstenfalls zusätzlichen Speicher. Ich bin mir nicht wirklich bewusst, dass jemand "externen" Speicher für Algorithmen verwendet. –