Es ist theoretisch möglich, ein Array in 10 Moves zu sortieren, indem nur Elemente verschoben werden, die nicht bereits in sortierter Reihenfolge sind.Sortierung Array in der minimalen Anzahl von Zügen
Wenn die einzige erlaubte Operation eine In-Place-Verschiebung ist, indem Sie ein Element aus Index A entfernen und es in Index B einfügen, ein Element nach dem anderen, wie würden Sie die richtigen Bewegungen erzeugen, um mit dem sortierten Array zu enden? Auch hier sollte Bewegungen erforderlich sein.
Zum Beispiel, hier ist ein Array:
[ 1, 8, 5, 2, 4, 6, 3, 9, 7, 10 ]
Die längste aufsteigende Teilfolge ist:
[ 1, 2, 4, 6, 7, 10 ]
Die Indizes dieser Elemente sind:
[ 0, 3, 4, 5, 8, 9 ]
So werden die Indizes Wir müssen umziehen sind:
[ 1, 2, 6, 7]
da dies die Indizes sind, die nicht bereits in sortierter Reihenfolge sind.
Um mit einem sortierten Array, um am Ende, die letzten Indizes jener 4 Elemente sind:
[ 7, 4, 2, 8]
So müssen wir gleichzeitig Index 1 bis Index 7, Index 2 zu indizieren 4 bewegen, index 6 zu Index 2 und Index 7 zu Index 8. Das Problem ist, dass wenn ein Element verschoben wird, die anderen Elemente verschoben werden, wodurch die späteren Verschiebeoperationen ungültig werden. Ich habe versucht, diese Indizes zu transformieren, aber bis jetzt habe ich noch nicht die richtige Liste von Moves gefunden. Irgendwelche Ideen?
Hoffentlich habe ich das Problem gut genug erklärt. Bitte stellen Sie Fragen und ich werde klären. Vielen Dank!
Wie hast du 'transformiert die Indizes? Wenn Sie nach dem Tauschen von '1 <> 7' alle Vorwärtsreferenzen auf '7' durch' 1' und umgekehrt ersetzen, würde '7 <> 8' zu' 1 <> 8' und diese drei Werte wären dann in der korrekte Positionen. –