Tri par fusion
Dans ce défi, vous allez implémenter le sous-programme de fusion de tri par fusion. Plus précisément, vous devez créer une fonction ou un programme ou un verbe ou similaire qui prend deux listes, chacune triée par ordre croissant, et les combine en une liste triée par ordre croissant. Exigences:
- Votre algorithme doit prendre un temps asymptotiquement linéaire dans la taille de l'entrée. Veuillez cesser de donner des solutions O (n ^ 2).
- Vous ne pouvez pas utiliser de fonctions intégrées capables de trier une liste, ou de fusionner une liste, ou quelque chose comme ça. Discrétion de l'auteur.
- Le code doit être capable de gérer des éléments répétés.
- Ne vous inquiétez pas des listes vides.
Exemples:
merge([1],[0,2,3,4])
[0,1,2,3,4]
merge([1,5,10,17,19],[2,5,9,11,13,20])
[1, 2, 5, 5, 9, 10, 11, 13, 17, 19, 20]
Il s'agit de code-golf , alors que le code le plus court gagne!
b=a;b=b.length
pourrait dupliquer le tableau entier a
(et entraîner un temps O (n ^ 2) s'il est exécuté pour chaque élément) ou dupliquer uniquement la référence au tableau (temps O (n)). Lequel compte?