Herausforderung
Bei einem nicht leeren Array von ganzen Zahlen, zB:
[5, 2, 7, 6, 4, 1, 3]
Teilen Sie es zunächst in Arrays auf, in denen kein Element größer als das vorherige ist (dh nicht aufsteigende Arrays):
[5, 2] [7, 6, 4, 1] [3]
Kehren Sie als Nächstes jedes Array um:
[2, 5] [1, 4, 6, 7] [3]
Zum Schluss verketten Sie sie alle miteinander:
[2, 5, 1, 4, 6, 7, 3]
Dies sollte sein, was Ihre Programmausgaben / -funktion zurückgibt. Wiederholen Sie diesen Vorgang so oft, bis das Array vollständig sortiert ist.
Regeln
- Die Ein- und Ausgabe kann durch beliebige Standardmethoden erfolgen und in einem beliebigen vernünftigen Array-Format erfolgen.
- Das Eingabearray ist niemals leer, kann jedoch Negative und / oder Duplikate enthalten.
- Der absolute Wert jeder Ganzzahl ist immer kleiner als 2 31 .
Testfälle
Hoffentlich decken diese alle Randfälle ab:
[1] -> [1]
[1, 1] -> [1, 1]
[1, 2] -> [1, 2]
[2, 1] -> [1, 2]
[2, 3, 1] -> [2, 1, 3]
[2, 1, 3] -> [1, 2, 3]
[2, 1, 2] -> [1, 2, 2]
[2, 1, 1] -> [1, 1, 2]
[3, 1, 1, 2] -> [1, 1, 3, 2]
[3, 2, 1, 2] -> [1, 2, 3, 2]
[3, 1, 2, 2] -> [1, 3, 2, 2]
[1, 3, 2, 2] -> [1, 2, 2, 3]
[1, 0, 5, -234] -> [0, 1, -234, 5]
[1, 0, 1, 0, 1] -> [0, 1, 0, 1, 1]
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5]
[2, 1, 5, 4, 3] -> [1, 2, 3, 4, 5]
[2, 3, 1, 5, 4] -> [2, 1, 3, 4, 5]
[5, 1, 4, 2, 3] -> [1, 5, 2, 4, 3]
[5, 2, 7, 6, 4, 1, 3] -> [2, 5, 1, 4, 6, 7, 3]
[-5, -2, -7, -6, -4, -1, -3] -> [-5, -7, -2, -6, -4, -3, -1]
[14, 5, 3, 8, 15, 7, 4, 19, 12, 0, 2, 18, 6, 11, 13, 1, 17, 16, 10, 9] -> [3, 5, 14, 8, 4, 7, 15, 0, 12, 19, 2, 6, 18, 11, 1, 13, 9, 10, 16, 17]
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
O(n^2)
O(n)
. Tauschen Sie das erste und das letzte Element aus. Tauschen Sie dann das vorletzte und das vorletzte Element usw. aus, wenn Sie den mittleren Anschlag erreicht haben.
O(n)
Umkehren ist , aber das Umkehren kann direkt in den Algorithmus eingebaut werden (das ist, was meine JS-Antwort tut). Da jede Iteration jedes Element im Array einmal durchläuft, handelt es sich um eine einzelne Iteration O(n)
. (Ich denke ...)