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 ...)