¿Cómo se fusionan las matrices en c?++?

¿Cómo se fusionan las matrices en c?++?
Suponga que tiene una matriz de 5 caracteres y otra matriz de 8 caracteres. Si estas dos matrices se combinan en una matriz, se han fusionado ambas matrices. La nueva matriz tendría 13 caracteres (= 5 + 8). El orden en que los diferentes elementos de matriz están organizados en la nueva matriz no importa; y eso es fusionar dos matrices.

En C ++, hay un problema técnico, en el sentido de que se producen tres matrices en lugar de la nueva matriz fusionada. ¿No sería bueno eliminar las dos matrices antiguas después de fusionarse, y memoria sin usar gratis?? C ++ tiene dos formas de fusionar dos matrices: si las dos matrices fusionadas, usan memoria dinámica, entonces se pueden eliminar para terminar con una matriz; De lo contrario, el programador termina con tres matrices.

Fusionar matrices, en última instancia, encajando una en la parte posterior del otro es bueno; Pero puede ser mejor tener una clasificación mínima ya que las matrices se fusionan. Clasificar en su conjunto es un tema completo en la programación. La clasificación en su conjunto no se aborda en este artículo. Sin embargo, se aborda una clasificación mínima muy simple.

Este artículo explica cómo fusionar dos matrices, para terminar con tres matrices y cómo fusionar dos matrices para terminar con una matriz. También se considera una clasificación mínima. Para fusionar dos matrices, las dos matrices deben ser del mismo tipo.

El procedimiento de fusión de dos matrices se puede extender a más de dos matrices.

Contenido del artículo

  • Fusionar matrices sin tienda gratis
  • Fusionar matrices usando una tienda gratuita
  • Conclusión

Fusionar matrices sin tienda gratis

Fusionarse sin clasificar

Considere las siguientes dos matrices:

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

El primero tiene 5 elementos y el segundo tiene 8 elementos. Si los elementos de la segunda matriz se ajustan de alguna manera a la parte posterior de la primera matriz, se formará una matriz de 13 elementos. Para lograr esto sin usar el almacén gratuito (memoria dinámica), primero se debe crear una tercera matriz de 13 valores vacíos. Luego se copiarán los 5 valores de la primera matriz, a las primeras 5 ubicaciones de la tercera matriz. Los 8 valores de la segunda matriz se copiarán a las 8 posiciones restantes de la tercera matriz. La tercera matriz se convierte en la matriz fusionada y deseada. El siguiente programa ilustra esto:

#incluir
usando el espacio de nombres STD;
int main ()

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

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

para (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<regresar 0;

La salida es:

I J K L M A B C D E F G H

Tenga en cuenta cómo se ha utilizado la indexación en los bucle. El problema con este esquema es que las dos primeras matrices se han vuelto redundantes. Ahora están ocupando la memoria de la computadora innecesariamente. Sin una tienda gratuita (memoria dinámica), las matrices no se pueden eliminar de la memoria hasta que salgan del alcance. Para resolver este problema, use la tienda gratuita: consulte a continuación.

El primer segmento de código incluye la biblioteca iOStream y declara el uso del espacio de nombres estándar para el resto del programa. El resto del programa está en la función Main (). Las primeras tres declaraciones en la función Main () declaran las primeras, segunda y tercera matrices. El siguiente segmento de código es un for-bucle que copia todos los elementos de la matriz más pequeña a la tercera matriz. La matriz más grande de los dos primeros podría haberse copiado primero; No importa.

El siguiente segmento de código utiliza el bucle for-bool para copiar la matriz más grande en la parte posterior de la matriz más pequeña que ya está en la tercera matriz. La tercera matriz es la matriz fusionada. La suma del número de elementos en las dos primeras matrices debería igualar el número de elementos en la tercera matriz. El último segmento de código muestra los valores en la tercera matriz.

Fusionarse con alguna clasificación

Al insertar elementos en la tercera matriz, al principio, se pueden comparar los primeros elementos de ambas matrices y el valor más pequeño insertado primero antes del primer valor de la otra matriz. Los segundos elementos de ambas matrices se pueden comparar a continuación, y el valor más pequeño insertado en la tercera matriz, antes del segundo valor de la otra matriz, se inserta. Los terceros elementos de ambas matrices se pueden comparar a continuación, y el valor más pequeño insertado antes del tercer valor de la otra matriz. Este procedimiento continúa hasta que todos los elementos de la matriz más corta se insertan junto con la misma cantidad de elementos de la matriz más larga. El resto de los elementos de la matriz más larga se pueden empujar a la tercera matriz en su orden. El siguiente programa ilustra esto:

#incluir
usando el espacio de nombres STD;
int main ()

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

demás
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


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

para (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<regresar 0;

La salida es:

A I B J C K D L E M F G H

Tenga en cuenta la aritmética utilizada en los índices.

Fusionar matrices usando una tienda gratuita

Fusionarse sin clasificar

La tienda gratuita es la memoria asignada a un programa que se utilizará cuando necesite memoria adicional. Se puede crear y eliminar una matriz en la tienda gratuita con el nuevo operador [] y el operador Eliminar [], respectivamente. Los dos programas anteriores se repetirán a continuación. La primera y segunda matrices se creará dinámicamente en la tienda gratuita, y se eliminarán después de que se haya realizado la tercera matriz fusionada. La tercera matriz se creará en la memoria normal (área).

El siguiente programa ilustra esto para fusionar sin ordenar:

#incluir
usando el espacio de nombres STD;
int main ()

char *arr1 = nuevo char [5];
arr1 [0] = 'i'; arr1 [1] = 'j'; arr1 [2] = 'k'; arr1 [3] = 'l'; arr1 [4] = 'm';
char *arr2 = nuevo 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];
// fusionando
para (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

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

eliminar [] arr1;
eliminar [] arr2;
para (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<regresar 0;

La salida es:

I J K L M A B C D E F G H

El nombre de las matrices en la tienda gratuita son consejos. Las ubicaciones de los elementos de ARR1 y ARR2 se eliminaron después de su uso en el programa. El resto del código es como uno anterior.

Fusionarse con alguna clasificación

El programa anterior con alguna clasificación se repite aquí. Sin embargo, aquí, la primera y la segunda matrices se crean en la tienda gratuita. Se eliminan después de su uso. El programa es:

#incluir
usando el espacio de nombres STD;
int main ()

char *arr1 = nuevo char [5];
arr1 [0] = 'i'; arr1 [1] = 'j'; arr1 [2] = 'k'; arr1 [3] = 'l'; arr1 [4] = 'm';
char *arr2 = nuevo 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];
// fusionando
para (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

demás
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


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

eliminar [] arr1;
eliminar [] arr2;
para (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<regresar 0;

La salida es:

A I B J C K D L E M F G H

Conclusión

Fusionar matrices es en realidad algo simple. Finalmente, ajusta una matriz en la parte posterior de la otra matriz, y has fusionado las dos matrices. Los problemas que enfrentan los programadores con matrices de fusión, no tienen que ver con el ajuste de una matriz en la parte posterior de otra matriz. Tienen que ver con borrar las dos matrices anteriores y/o clasificar la matriz fusionada. Las matrices deben ser del mismo tipo, para fusionarse.

Si cualquiera de las dos primeras matrices ya no se necesitará después de fusionarse, entonces debe crearse dinámicamente en la tienda gratuita, y luego se eliminará después de su uso, a la memoria libre. La matriz fusionada también se puede crear en la tienda gratuita, pero eso no es necesario.

La matriz fusionada se puede clasificar en diferentes extensiones. La clasificación completa es un tema completo en la programación de computadoras. La clasificación completa es de diferentes esquemas en la programación de computadoras. Hay un esquema llamado fusión. Este esquema hace la fusión y la clasificación al mismo tiempo. Sin embargo, el esquema más popular parece ser rápido.