Prépa Code Connexion Inscription

Exercices de programmation pour classes préparatoires

← Retour aux exercices

Fusion de deux tableaux triés (taille en case 0)

ocaml ★★★☆☆

On adopte dans cet exercice la convention suivante pour représenter un tableau d'entiers :

Autrement dit, la taille réelle (au sens d'Array.length) peut être supérieure à n+1 : seul le préfixe t.(1) ... t.(t.(0)) a un sens. Un tableau logiquement vide est représenté par [|0|].

Exemple. Le tableau

[| 3 ; 1 ; 4 ; 7 ; 99 ; -2 ; 0 |]

est de longueur 7 au sens d'Array.length, mais sa case 0 vaut 3 : il représente donc la séquence triée 1, 4, 7 (cases 1 à 3). Les cases 4, 5, 6 contiennent 99, -2, 0 mais sont à ignorer — elles ne font pas partie du tableau logique.

Écrire une fonction fusion : int array -> int array -> int array qui prend deux tableaux t1 et t2 au format ci-dessus et renvoie un nouveau tableau au même format, contenant tous les éléments de t1 et de t2, triés par ordre croissant.

On garde toutes les répétitions : si un même entier x apparaît a fois dans t1 et b fois dans t2, il apparaîtra a + b fois dans le résultat. La taille logique du résultat est donc t1.(0) + t2.(0).

Le tableau renvoyé n'aura pas de cases inutilisées en queue.

Exemples

AppelRésultat attendu
fusion [|3; 1; 3; 5|] [|3; 2; 4; 6|] [|6; 1; 2; 3; 4; 5; 6|]
fusion [|0|] [|3; 1; 2; 3|] [|3; 1; 2; 3|]

Votre code

Connectez-vous pour soumettre du code.