Como você mescla matrizes em C++?

Como você mescla matrizes em C++?
Suponha que você tenha uma matriz de 5 caracteres e outra matriz de 8 caracteres. Se essas duas matrizes forem combinadas em uma matriz, ambas as matrizes foram mescladas. A nova matriz teria 13 caracteres (= 5 + 8). A ordem em que os diferentes elementos da matriz são dispostos na nova matriz não importa; E isso é a fusão de duas matrizes.

Em C ++, há um problema técnico, no sentido de que três matrizes resultam em vez da nova matriz mesclada. Não seria bom excluir as duas matrizes antigas após a fusão e a memória não utilizada livre? O C ++ tem duas maneiras de se fundir duas matrizes: se as duas matrizes mescladas mescladas, usavam memória dinâmica, elas podem ser excluídas para acabar com uma matriz; Caso contrário, o programador acaba com três matrizes.

A fusão de matrizes, em última análise, ajustar uma na parte de trás da outra é boa; Mas pode ser melhor ter uma classificação mínima, pois as matrizes são mescladas. Classificar como um todo, é um tópico inteiro em programação. Classificar como um todo não é abordado neste artigo. No entanto, uma classificação mínima muito simples é abordada.

Este artigo explica como mesclar duas matrizes, para acabar com três matrizes e como mesclar duas matrizes para acabar com uma matriz. Alguma classificação mínima também é considerada. Para mesclar duas matrizes, as duas matrizes devem ser do mesmo tipo.

O procedimento de fusão de duas matrizes pode ser estendido a mais de duas matrizes.

Conteúdo do artigo

  • Mesclagem de matrizes sem loja grátis
  • Mesclagem de matrizes usando uma loja grátis
  • Conclusão

Mesclagem de matrizes sem loja grátis

Mesclando sem classificar

Considere as duas matrizes a seguir:

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

O primeiro tem 5 elementos e o segundo tem 8 elementos. Se os elementos da segunda matriz estiverem de alguma forma instalados na parte traseira da primeira matriz, uma matriz de 13 elementos será formada. Para conseguir isso sem o uso da loja gratuita (memória dinâmica), uma terceira matriz de 13 valores vazios deve ser criada primeiro. Em seguida, os 5 valores da primeira matriz serão copiados, para os 5 primeiros locais da terceira matriz. Os 8 valores da segunda matriz serão copiados para as 8 posições restantes da terceira matriz. A terceira matriz se torna a matriz mesclada e desejada. O programa a seguir ilustra o seguinte:

#incluir
usando namespace 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<retornar 0;

A saída é:

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

Observe como a indexação foi usada nos loops para. O problema com esse esquema é que as duas primeiras matrizes se tornaram redundantes. Eles agora estão ocupando a memória do computador desnecessariamente. Sem loja gratuita (memória dinâmica), as matrizes não podem ser removidas da memória até sair do escopo. Para resolver esse problema, use uma loja gratuita - veja abaixo.

O primeiro segmento de código inclui a biblioteca iostream e declara o uso do espaço para nome padrão para o restante do programa. O restante do programa está na função principal (). As três primeiras declarações da função Main () declara a primeira, segunda e terceira matrizes. O próximo segmento de código é um loop para copia todos os elementos da matriz menor para a terceira matriz. A grande variedade dos dois primeiros poderia ter sido copiada primeiro; isso não importa.

O próximo segmento de código usa o loop for para copiar a matriz maior na parte traseira da matriz menor já na terceira matriz. A terceira matriz é a matriz mesclada. A soma do número de elementos nas duas primeiras matrizes deve ser igual ao número de elementos na terceira matriz. O último segmento de código exibe os valores na terceira matriz.

Fusão com alguma classificação

Enquanto inserindo elementos na terceira matriz, no início, os primeiros elementos de ambas as matrizes podem ser comparados e o valor menor inserido primeiro antes do primeiro valor da outra matriz. Os segundos elementos de ambas as matrizes podem ser comparados a seguir, e o menor valor inserido na terceira matriz, antes do segundo valor da outra matriz, é inserida. Os terceiros elementos de ambas as matrizes podem ser comparados a seguir, e o valor menor inserido antes do terceiro valor da outra matriz. Este procedimento continua até que todos os elementos da matriz mais curta sejam inseridos ao lado do mesmo número de elementos da matriz mais longa. O restante dos elementos da matriz mais longa pode ser empurrado para a terceira matriz em seu pedido. O programa a seguir ilustra o seguinte:

#incluir
usando namespace 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];

outro
arr3 [i*2] = arr2 [i];
ar3 [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<retornar 0;

A saída é:

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

Observe a aritmética usada nos índices.

Mesclagem de matrizes usando uma loja grátis

Mesclando sem classificar

A loja gratuita é a memória alocada a um programa a ser usado quando precisar de memória extra. Uma matriz pode ser criada e excluída na loja gratuita com o novo operador [] e o operador delete [], respectivamente. Os dois programas acima serão repetidos abaixo. A primeira e a segunda matrizes serão criadas dinamicamente na loja gratuita e serão excluídas após a terceira matriz mesclada ter sido feita. A terceira matriz será criada na memória normal (área).

O programa a seguir ilustra isso para fusão sem classificar:

#incluir
usando namespace std;
int main ()

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

para (int i = 5; i< 13; i++)
ARR3 [i] = ARR2 [I-5];

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

cout<retornar 0;

A saída é:

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

O nome das matrizes na loja gratuita são dicas. Os locais dos elementos de ARR1 e ARR2 foram excluídos após seu uso no programa. O resto do código é como um anterior.

Fusão com alguma classificação

O programa anterior com alguma classificação é repetido aqui. No entanto, aqui, a primeira e a segunda matrizes são criadas em uma loja gratuita. Eles são excluídos após seu uso. O programa é:

#incluir
usando namespace std;
int main ()

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

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


para (int i = 5; i< 8; i++)
ARR3 [i+5] = ARR2 [i];

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

cout<retornar 0;

A saída é:

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

Conclusão

Fusão de matrizes é realmente uma coisa simples. Acabei de se encaixar em uma matriz na parte de trás da outra matriz, e você fundiu as duas matrizes. Os programas que os programadores enfrentam com a fusão de matrizes não têm a ver com o ajuste de uma matriz na parte traseira de outra matriz. Eles devem fazer a apagamento das duas matrizes anteriores e/ou classificar a matriz mesclada. As matrizes devem ser do mesmo tipo, para serem mescladas.

Se alguma das duas primeiras matrizes não será mais necessária após a fusão, ela deve ser criada dinamicamente na loja gratuita e depois excluída após o uso, para a memória livre. A matriz mesclada também pode ser criada na loja gratuita, mas isso não é necessário.

A matriz mesclada pode ser classificada em diferentes extensões. A classificação completa é um tópico inteiro na programação de computador. A classificação completa é de esquemas diferentes na programação de computadores. Existe um esquema chamado Merge-Sorte. Este esquema faz a fusão e a classificação ao mesmo tempo. No entanto, o esquema mais popular parece ser o Quicksort.