Comment fusionner les tableaux en C++?

Comment fusionner les tableaux en C++?
Supposons que vous avez un tableau de 5 caractères et un autre tableau de 8 caractères. Si ces deux tableaux sont combinés en un tableau, alors les deux tableaux ont été fusionnés. Le nouveau tableau aurait 13 caractères (= 5 + 8). L'ordre dans lequel les différents éléments du tableau sont organisés dans le nouveau tableau, n'a pas d'importance; Et cela fusionne de deux tableaux.

En C ++, il y a un problème technique, dans le sens où trois tableaux résultent au lieu d'un nouveau tableau fusionné. Ne serait-il pas agréable de supprimer les deux anciens tableaux après la fusion et de mémoire inutilisée gratuite? C ++ a deux façons de faire fusionner deux tableaux: si les deux tableaux ont fusionné, utilisé la mémoire dynamique, ils peuvent être supprimés pour se retrouver avec un tableau; Sinon, le programmeur se retrouve avec trois tableaux.

La fusion des tableaux en fin de compte en ajuster l'une à l'arrière de l'autre est bonne; Mais il peut être préférable d'avoir un tri minimal car les tableaux sont fusionnés. Le tri dans son ensemble est un sujet entier dans la programmation. Le tri dans son ensemble n'est pas abordé dans cet article. Cependant, un tri minimal très simple est traité.

Cet article explique comment fusionner deux tableaux, pour se retrouver avec trois tableaux et comment fusionner deux tableaux pour se retrouver avec un tableau. Un certain tri minimal est également considéré. Pour fusionner deux tableaux, les deux tableaux doivent être du même type.

La procédure de fusion de deux tableaux peut être étendue à plus de deux tableaux.

Contenu de l'article

  • Fusion des tableaux sans magasin gratuit
  • Fusion des tableaux en utilisant un magasin gratuit
  • Conclusion

Fusion des tableaux sans magasin gratuit

Fusion sans tri

Considérez les deux tableaux suivants:

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';

Le premier a 5 éléments et le second a 8 éléments. Si les éléments du deuxième tableau sont en quelque sorte adaptés à l'arrière du premier tableau, un tableau de 13 éléments sera formé. Pour y parvenir sans utiliser de magasin gratuit (mémoire dynamique), un troisième tableau de 13 valeurs vides doit être créé en premier. Ensuite, les 5 valeurs du premier tableau seront copiées, aux 5 premiers emplacements du troisième tableau. Les 8 valeurs du deuxième tableau seront ensuite copiées sur les 8 positions restantes du troisième tableau. Le troisième tableau devient le tableau fusionné et souhaité. Le programme suivant illustre ceci:

#inclure
Utilisation de Namespace Std;
int main()

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';
Char Arr3 [13];
pour (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

pour (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

pour (int i = 0; i< 13; i++)
couter<< arr3[i] << ";

couter<retour 0;

La sortie est:

I j k l m a b c d e f g h

Remarque comment l'indexation a été utilisée dans les boucles pour. Le problème avec ce schéma est que les deux premiers tableaux sont devenus redondants. Ils occupent maintenant la mémoire de l'ordinateur inutilement. Sans magasin gratuit (mémoire dynamique), les tableaux ne peuvent pas être supprimés de la mémoire jusqu'à ce qu'ils sortent de la portée. Pour résoudre ce problème, utilisez un magasin gratuit - voir ci-dessous.

Le premier segment de code comprend la bibliothèque iOStream et déclare l'utilisation de l'espace de noms standard pour le reste du programme. Le reste du programme est dans la fonction principale (). Les trois premières déclarations de la fonction principale () déclarent les premier, deuxième et troisième tableaux. Le segment de code suivant est une boucle pour copie tous les éléments du plus petit tableau vers le troisième tableau. La plus grande gamme des deux premiers aurait pu être copiée en premier; ce n'est pas important.

Le segment de code suivant utilise la boucle pour copier le plus grand tableau à l'arrière du plus petit tableau déjà dans le troisième tableau. Le troisième tableau est le tableau fusionné. La somme du nombre d'éléments dans les deux premiers tableaux devrait être égal au nombre d'éléments dans le troisième tableau. Le dernier segment de code affiche les valeurs du troisième tableau.

Fusion avec un certain tri

Tout en insérant des éléments dans le troisième tableau, au début, les premiers éléments des deux tableaux peuvent être comparés et la plus petite valeur insérée avant la première valeur de l'autre tableau. Les deuxièmes éléments des deux tableaux peuvent être comparés ensuite, et la valeur plus petite insérée dans le troisième tableau, avant la deuxième valeur de l'autre tableau, est insérée. Les troisième éléments des deux tableaux peuvent être comparés ensuite, et la valeur plus petite insérée avant la troisième valeur de l'autre tableau. Cette procédure se poursuit jusqu'à ce que tous les éléments du tableau plus court soient insérés aux côtés du même nombre d'éléments du tableau plus long. Le reste des éléments du tableau plus long peut simplement être poussé dans le troisième tableau de leur ordre. Le programme suivant illustre ceci:

#inclure
Utilisation de Namespace Std;
int main()

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';
Char Arr3 [13];
pour (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i * 2] = arr1 [i];
arr3 [i * 2 + 1] = arr2 [i];

autre
arr3 [i * 2] = arr2 [i];
arr3 [i * 2 + 1] = arr1 [i];


pour (int i = 5; i< 8; i++)
arr3 [i + 5] = arr2 [i];

pour (int i = 0; i< 13; i++)
couter<< arr3[i] << ";

couter<retour 0;

La sortie est:

A i b j c k d l e m f g h

Notez l'arithmétique utilisée dans les index.

Fusion des tableaux en utilisant un magasin gratuit

Fusion sans tri

Le magasin gratuit est une mémoire allouée à un programme à utiliser lorsqu'il a besoin de mémoire supplémentaire. Un tableau peut être créé et supprimé dans un magasin gratuit avec le nouvel opérateur [] et l'opérateur de suppression [], respectivement. Les deux programmes ci-dessus seront répétés ci-dessous. Les premier et deuxième tableaux seront créés dynamiquement dans le magasin gratuit et seront supprimés après la réalisation du troisième tableau fusionné. Le troisième tableau sera créé en mémoire normale (zone).

Le programme suivant illustre cela pour la fusion sans tri:

#inclure
Utilisation de Namespace Std;
int main()

char * arr1 = new Char [5];
arr1 [0] = 'i'; Arr1 [1] = 'J'; Arr1 [2] = 'K'; Arr1 [3] = 'l'; Arr1 [4] = 'M';
char * arr2 = new Char [8];
Arr2 [0] = 'A'; arr2 [1] = 'b'; Arr2 [2] = 'C'; Arr2 [3] = 'D'; arr2 [4] = 'e'; arr2 [5] = 'f'; arr2 [6] = 'g'; arr2 [7] = 'h';
Char Arr3 [13];
// fusion
pour (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

pour (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

supprimer [] arr1;
supprimer [] arr2;
pour (int i = 0; i< 13; i++)
couter<< arr3[i] << ";

couter<retour 0;

La sortie est:

I j k l m a b c d e f g h

Le nom des tableaux en magasin gratuit est des pointeurs. Les emplacements des éléments de ARR1 et ARR2 ont été supprimés après leur utilisation dans le programme. Le reste du code est comme un précédent.

Fusion avec un certain tri

Le programme précédent avec un tri est répété ici. Cependant, ici, les premier et deuxième tableaux sont créés dans un magasin gratuit. Ils sont supprimés après leur utilisation. Le programme est:

#inclure
Utilisation de Namespace Std;
int main()

char * arr1 = new Char [5];
arr1 [0] = 'i'; Arr1 [1] = 'J'; Arr1 [2] = 'K'; Arr1 [3] = 'l'; Arr1 [4] = 'M';
char * arr2 = new Char [8];
Arr2 [0] = 'A'; arr2 [1] = 'b'; Arr2 [2] = 'C'; Arr2 [3] = 'D'; arr2 [4] = 'e'; arr2 [5] = 'f'; arr2 [6] = 'g'; arr2 [7] = 'h';
Char Arr3 [13];
// fusion
pour (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i * 2] = arr1 [i];
arr3 [i * 2 + 1] = arr2 [i];

autre
arr3 [i * 2] = arr2 [i];
arr3 [i * 2 + 1] = arr1 [i];


pour (int i = 5; i< 8; i++)
arr3 [i + 5] = arr2 [i];

supprimer [] arr1;
supprimer [] arr2;
pour (int i = 0; i< 13; i++)
couter<< arr3[i] << ";

couter<retour 0;

La sortie est:

A i b j c k d l e m f g h

Conclusion

La fusion des tableaux est en fait une chose simple. En fin de compte, ajustez un tableau à l'arrière de l'autre tableau, et vous avez fusionné les deux tableaux. Les problèmes auxquels les programmeurs sont confrontés avec la fusion des tableaux, ne sont pas à faire avec le montage d'un tableau à l'arrière d'un autre tableau. Ils ont à faire avec l'effacement des deux tableaux précédents et / ou le trier le tableau fusionné. Les tableaux doivent être du même type, pour être fusionné.

Si l'un des deux premiers tableaux ne sera plus nécessaire après la fusion, il doit être créé dynamiquement dans un magasin gratuit, puis être supprimé après utilisation, pour la mémoire libre. Le tableau fusionné peut également être créé dans un magasin gratuit, mais ce n'est pas nécessaire.

Le tableau fusionné peut être trié à différentes côtés. Le tri complet est un sujet entier dans la programmation informatique. Le tri complet est de différents schémas dans la programmation informatique. Il y a un schéma appelé Merge-Sort. Ce schéma fait la fusion et le tri en même temps. Cependant, le schéma le plus populaire semble être Quicksort.