2016-07-16 9 views
0

Welche Sortieralgorithmen wären gut, um einen Stack für die Platzeffizienz zu sortieren? Ich muss einen Stapel an Ort und Stelle sortieren. Auch mein Verständnis von "In Place" -Algorithmen war, dass sie keine zusätzlichen Datenstrukturen verwenden - ist das korrekt?Algorithmus zum Sortieren des Stapels an Ort und Stelle

Ich weiß, das ist ähnlich wie this question, aber ich frage mich, ob es für Stacks anders wäre? Ich weiß Stacks können nur eine Art von Linkedlist sein, aber macht die Tatsache, dass Sie nur auf die Top-Änderung zugreifen können, wie Sie es tun würden?

+0

Führen Sie keine dieser [https://www.google.com/search#q=sort+stack+in+place] Antworten auf Ihre Frage durch? – dimo414

+0

Wenn Sie Funktionen des Stacks, wie Push und Pop, nur eingeschränkt verwenden können, benötigen Sie sicherlich etwas Platz zum Sortieren. Aber wenn Sie die Stack-Implementierung berühren dürfen, können wir diesen Platz effizient nutzen. (Wenn der Stapel mit einer verketteten Liste erstellt wird, können wir die Funktionen der verketteten Liste verwenden, um zu sortieren) – pahan

+0

Übrigens, wenn Sie einen Stapel an Ort und Stelle sortieren, wird es kein Stapel mehr sein. Wenn Sie in einer Situation sind, in der Sie einen Stapel sortieren müssen, benötigen Sie sicher eine andere Datenstruktur, um die sortierten Werte zu speichern, um den Stapel zu erhalten. – pahan

Antwort

0

Sie müssen das "in-place" -Kennzeichen überspringen, wenn Sie den Stapel nur mit Stapeloperationen sortieren wollen (Sie müssen einen anderen Stapel haben). Ein In-Place-Algorithmus ist ein Algorithmus, der seine Eingabe unter Verwendung anderer Datenstrukturen transformiert. Für intermediäre/temporäre Variablen ist jedoch eine kleine Menge zusätzlichen Speicherplatzes zulässig.

Wenn Sie die „in-place“ Qualifier auslassen Sie Ihre Antwort finden Sie hier: How to sort a stack using only stack operations? (sortiert einen Stapel einen zusätzlichen Helfer Stack)

Wenn Sie die Qualifier dann das Sortieren des Stapels beibehalten auf die nur möglich ist, Implementierungsebene und nicht mithilfe von Stapeloperationen.

0

Es gibt eine alternative Definition für in-Place-Art das bedeutet nur die sortierten Daten endet wieder im gleichen Behälter nach oben (in diesem Fall ein Stapel), dass die unsortierte Daten, die ursprünglich in gespeichert wurde.

Kommen wir zurück zu den Originalfrage, die einzige Möglichkeit, auf das letzte Element eines Stapels zuzugreifen und/oder dieses zu ändern, ist das Abspringen aller anderen Elemente, was an anderer Stelle O (n-1) Platz erfordert, wobei das einfachste ein Array ist.

Wenn der Stapel als verkettete Liste implementiert ist, kann eine Sortierung nach Art einer verknüpften Liste verwendet werden. Dies wäre jedoch eine listorientierte Sortierung mit anderen Operationen als den Standard-Stapeloperationen peek, pop und push.

Verwandte Themen