Défi
Étant donné un tableau d'entiers non vide, par exemple:
[5, 2, 7, 6, 4, 1, 3]
Commencez par diviser le tableau en tableaux où aucun élément n’est plus volumineux que le précédent (tableaux non ascendants):
[5, 2] [7, 6, 4, 1] [3]
Ensuite, inversez chaque tableau:
[2, 5] [1, 4, 6, 7] [3]
Enfin, concaténez-les tous ensemble:
[2, 5, 1, 4, 6, 7, 3]
Cela devrait correspondre aux résultats / fonctions de votre programme. Répétez cette procédure suffisamment de fois et le tableau sera entièrement trié.
Règles
- L'entrée et la sortie peuvent être données par n'importe quelle méthode standard et dans n'importe quel format de tableau raisonnable.
- Le tableau en entrée ne sera jamais vide, mais peut contenir des négatifs et / ou des doublons.
- La valeur absolue de chaque entier sera toujours inférieure à 2 31 .
Cas de test
Espérons que ceux-ci couvrent tous les cas extrêmes:
[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]
Notation
C'est le code-golf , donc le code le plus court en octets gagne.
O(n^2)
O(n)
. permutez les premier et dernier éléments puis échangez les deuxième et deuxième derniers éléments, etc., lorsque vous arrivez au milieu.
O(n)
, mais l'inversion peut être intégrée directement dans l'algorithme (c'est ce que ma réponse JS fait); étant donné que chaque itération effectue une boucle sur chaque élément du tableau une seule fois, une seule itération l’est O(n)
. (Je pense ...)