Angenommen, ein Array ist gegeben durch a1, a2, ..., ak, _, a (k + 1), ..., an. Hier steht ein Unterstrich (_) für Leerzeichen. Wir können jedes Array-Element in diesen Raum verschieben. Wir können diese Operation beliebig oft wiederholen. Ist es möglich, jedes Array mit einem solchen Leerzeichen zu sortieren?Ist es möglich, ein Array mit einer temporären Variable/Platz zu sortieren?
Antwort
Ja, es ist möglich.
Ein sortiertes Array ist nur eine bestimmte Permutation dieses Arrays.
Jede mögliche Permutation kann durch eine Abfolge einzelner Swaps erreicht werden.
Und ein Austausch kann mit einem einzigen temporären Element implementiert werden.
(Es ist tatsächlich möglich, ein Array von integrierten Typen ohne eine temporäre, XOR-Operationen zu verwenden).
Es gibt verschiedene Algorithmen für die In-Place-Sortierung. Der bemerkenswerteste ist die nicht-rekursive Version von quick-sort (da die rekursive Version Platz auf dem Stack belegen würde, der proportional zur Anzahl der rekursiven Aufrufe ist), was Ihnen im Durchschnitt O (n log n) Komplexität gibt.
Eine andere Möglichkeit ist die Verwendung weniger effizienter Algorithmen wie Insertion Sort und Bubble Sort, deren Kompliziertheit O (n^2) ist.
Für was Ihre spezifische Frage betrifft, das ist, diesen spezifischen Raum zu benutzen, können Sie es für das Tauschen verwenden, wie von Bathsheba gesagt, aber ich würde meine Zeit nicht verlieren, die diese Art von Operation tut.
Beachten Sie auch die Tatsache, dass, wenn Sie explizite Vorstellung von einem „ungenutzten Raum“ haben in der Mitte des Arrays, sollten Sie versuchen, ihre semantische zu verstehen, das heißt, was wäre die korrekte Platzierung in Bezug auf der Bestellung sein. Wenn Sie dies nicht tun, und Sie es dort belassen, wo es ist, würden Sie sich mit einer "kaputten" Invariante wiederfinden, und Sie werden Schwierigkeiten haben, Algorithmen wie die binäre Suche in Ihrer Sammlung zu implementieren.
Ich habe solche Container noch nicht im eigentlichen Code gesehen, aber der einfachste zu implementierende Algorithmus (nicht der effizienteste!) Ist es, mit dem ersten Element leer zu tauschen, dann den kleinsten mit leerem zuerst zu tauschen, dann nehme man an Der Container beginnt an der zweiten Position und wiederholt sich bis zur letzten Position, bei der es sich um den leeren Platz handelt. In diesem Fall bedeutet "Tauschen" nur, leere Fläche ausfüllen und andere Position als leer markieren.
- 1. Ist es möglich, indexedDB-Ergebnismenge ohne temp-Array zu sortieren, d. H. Mit db-Abfragen
- 2. Ist es möglich, ein Wörterbuch in Julia zu sortieren?
- 3. Ist es möglich, die Funktion zum schnellen Sortieren zu machen, um das Array absteigend zu sortieren?
- 4. Multidimensionales Array für Scores mit temporären Variablen sortieren
- 5. AS3 - Ist es möglich, ein Array nach Objekteigenschaften zu durchsuchen?
- 6. Ist es möglich, ein dynamisches multidimensionales Array zu erstellen?
- 7. Ist es möglich, eine Inplace Merge ohne temporären Speicher durchzuführen?
- 8. Ist es möglich, ein Array von Strukturinstanzen zu erstellen?
- 9. Es ist möglich, ein Array ohne obere Grenze zu haben?
- 10. Ist es möglich, Refs in ein Array zu setzen?
- 11. Ist es möglich, mysql-Abfrage nach OR-Reihenfolge zu sortieren
- 12. Ist es möglich, ein Array mit konstantem zusätzlichen Platz umzukehren?
- 13. Ist es möglich, ein 2d-Array-Klassenmitglied im Konstruktor mit einer for-Schleife zu deklarieren?
- 14. Ist es möglich, ein Array von Nicht-POD mit einer neuen Operator- und Initialisierungssyntax zu initialisieren?
- 15. Ist es möglich, ein Array innerhalb einer for-Schleife zu verwenden? wie es steht
- 16. Ist es möglich, ein Icon zu verschieben?
- 17. Ist es möglich, eine Liste zu sortieren, die mit einer Textansicht angezeigt wird?
- 18. Ist es möglich, ein eigenes WordNet zu einer Bibliothek hinzuzufügen?
- 19. SSRS - Ist es möglich, ein Diagramm für ein Feld zu sortieren, das nicht angezeigt wird
- 20. Ist es möglich, ein Einlaufen zu erkennen?
- 21. Ist es möglich, in Wordpress
- 22. Ist es möglich, ein Pseudozufall zu teilen
- 23. Ist es möglich, ein CNN mit realer Ausgabe zu erstellen?
- 24. Warum ist es möglich, ein Array, aber kein Array von Strukturen mit gdb zu drucken?
- 25. Ist es möglich, ein Arbeitsblatt mit Ruby
- 26. Ist es möglich, Jekyll Collection und Jekyll Data in einem Array zu sortieren?
- 27. Ist es möglich, ein Bild mit HTML zu rendern?
- 28. Ist es möglich, ein Windows-Anwendungsfenster mit Javascript zu aktivieren?
- 29. Ist es möglich, ein PNG mit JS/CSS zu invertieren?
- 30. Python ein Array sortieren
Vielen Dank. Ich weiß sogar nicht, dass die ohne temporären Swap eine Version mit XOR haben. \t a = a^b; \t b = a^b; \t a = a^b; oder über Plus/Minus: \t a = a + b; \t b = a - b; \t a = a - b; –