Jak scalić tablice w C++?

Jak scalić tablice w C++?
Załóżmy, że masz szereg 5 znaków i kolejną gamę 8 znaków. Jeśli te dwie tablice są połączone w jedną tablicę, obie tablice zostały scalone. Nowa tablica miałaby 13 znaków (= 5 + 8). Kolejność, w której różne elementy tablicy są ułożone w nowej tablicy, nie ma znaczenia; I to łączy dwie tablice.

W C ++ występuje problem techniczny w tym sensie, że trzy tablice wynika z jednej nowej połączonej tablicy. Czy nie byłoby miło usunąć stare dwie tablice po połączeniu i bezpłatne niewykorzystane pamięć? C ++ ma dwa sposoby połączenia dwóch tablic: jeśli dwie tablice scalone, użyły pamięci dynamicznej, można je usunąć, aby skończyć z jedną tablicą; W przeciwnym razie programista kończy z trzema tablicami.

Łączenie tablic, ostatecznie dopasowanie jednego z tyłu drugiego jest dobre; Ale lepiej może mieć minimalne sortowanie w miarę scalania tablic. Sortowanie jako całość, to cały temat w programowaniu. Sortowanie jako całość nie jest adresowane w tym artykule. Jednak rozwiązane jest bardzo proste minimalne sortowanie.

W tym artykule wyjaśniono, jak połączyć dwie tablice, skończyć z trzema tablicami i jak scalić dwie tablice, aby skończyć z jedną tablicą. Rozważane jest również minimalne sortowanie. Aby połączyć dwie tablice, dwie tablice muszą być tego samego typu.

Procedura scalania dwóch tablic można rozszerzyć na więcej niż dwie tablice.

Treść artykułu

  • Łączenie tablic bez bezpłatnego sklepu
  • Łączenie tablic za pomocą bezpłatnego sklepu
  • Wniosek

Łączenie tablic bez bezpłatnego sklepu

Łączenie bez sortowania

Rozważ następujące dwie tablice:

char Arr1 [] = „i”, „j”, „k”, „l”, „m”;
char arr2 [] = „a”, „b”, „c”, „d”, „e”, „f”, „g”, „h”;

Pierwszy ma 5 elementów, a drugi ma 8 elementów. Jeśli elementy drugiej tablicy zostaną w jakiś sposób zamontowane z tyłu pierwszej tablicy, powstanie tablica 13 elementów. Aby to osiągnąć bez korzystania z bezpłatnego sklepu (pamięć dynamiczna), najpierw trzeba utworzyć trzecią tablicę 13 pustych wartości. Następnie 5 wartości pierwszej tablicy zostanie skopiowanych do pierwszych 5 lokalizacji trzeciej tablicy. 8 wartości drugiej tablicy zostanie następnie skopiowane do pozostałych 8 pozycji trzeciej tablicy. Trzecia tablica staje się połączoną i pożądaną tablicą. Poniższy program ilustruje to:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

char Arr1 [] = „i”, „j”, „k”, „l”, „m”;
char arr2 [] = „a”, „b”, „c”, „d”, „e”, „f”, „g”, „h”;
char Arr3 [13];
dla (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

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

dla (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<powrót 0;

Wyjście to:

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

Zwróć uwagę, w jaki sposób indeksowanie było używane w pętli. Problem z tym schematem polega na tym, że pierwsze dwie tablice stały się zbędne. Teraz niepotrzebnie zajmują pamięć komputera. Bez bezpłatnego sklepu (pamięć dynamiczna) tablic nie można usunąć z pamięci, dopóki nie zejdą z zakresu. Aby rozwiązać ten problem, użyj bezpłatnego sklepu - patrz poniżej.

Pierwszy segment kodu obejmuje bibliotekę iostream i deklaruje użycie standardowej przestrzeni nazw dla reszty programu. Reszta programu znajduje się w funkcji Main (). Pierwsze trzy stwierdzenia w funkcji Main () deklaruje pierwszą, drugą i trzecią tablicę. Kolejnym segmentem kodu jest zarzut, który kopiuje wszystkie elementy z mniejszej tablicy do trzeciej tablicy. Większy wachlarz pierwszych dwóch mógł zostać najpierw skopiowany; nie ważne.

Następny segment kodu używa pętli do skopiowania większej tablicy z tyłu mniejszej tablicy już w trzeciej tablicy. Trzecia tablica to połączona tablica. Suma liczby elementów w pierwszych dwóch tablicach powinna wyrównać liczbę elementów w trzeciej tablicy. Ostatni segment kodu wyświetla wartości w trzeciej tablicy.

Łączenie się z pewnym sortowaniem

Podczas wkładania elementów do trzeciej tablicy, na początku, pierwsze elementy obu tablic można porównać i mniejszą wartość włożoną najpierw przed pierwszą wartością drugiej tablicy. Drugie elementy obu tablic można porównać w następnej kolejności, a mniejsza wartość włożona do trzeciej tablicy, przed wstawieniem drugiej wartości drugiej tablicy. Trzecich elementów obu tablic można porównać w następnej kolejności, a mniejszą wartość wstawiono przed trzecią wartością drugiej tablicy. Ta procedura trwa do momentu wstawienia wszystkich elementów krótszej tablicy wraz z tą samą liczbą elementów dłuższej tablicy. Reszta elementów dłuższej tablicy można po prostu wepchnąć do trzeciej tablicy w swoim zamówieniu. Poniższy program ilustruje to:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

char Arr1 [] = „i”, „j”, „k”, „l”, „m”;
char arr2 [] = „a”, „b”, „c”, „d”, „e”, „f”, „g”, „h”;
char Arr3 [13];
dla (int i = 0; i< 5; i++)
if (ARR1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

w przeciwnym razie
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


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

dla (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<powrót 0;

Wyjście to:

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

Zwróć uwagę na arytmetykę stosowaną w indeksie.

Łączenie tablic za pomocą bezpłatnego sklepu

Łączenie bez sortowania

Bezpłatny sklep to pamięć przydzielona do programu, który ma być używany, gdy potrzebuje dodatkowej pamięci. Tablicę można utworzyć i usunąć odpowiednio w bezpłatnym sklepie z nowym operatorem [] i operatora delete []. Powyższe dwa programy zostaną powtórzone poniżej. Pierwsze i drugie tablice zostaną utworzone dynamicznie w bezpłatnym sklepie i zostaną usunięte po wykonaniu trzeciej połączonej tablicy. Trzecia tablica zostanie utworzona w normalnej pamięci (obszar).

Poniższy program ilustruje to w celu połączenia bez sortowania:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

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

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

delete [] arr1;
delete [] arr2;
dla (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<powrót 0;

Wyjście to:

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

Nazwa tablic w bezpłatnym sklepie to wskaźniki. Lokalizacje elementów ARR1 i ARR2 zostały usunięte po ich użyciu w programie. Reszta kodu jest jak poprzednia.

Łączenie się z pewnym sortowaniem

Poprzedni program z pewnym sortowaniem jest tutaj powtarzany. Jednak tutaj pierwsze i drugie tablice są tworzone w bezpłatnym sklepie. Są usunięci po ich użyciu. Program to:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

char *arr1 = nowy char [5];
arr1 [0] = „i”; arr1 [1] = „j”; arr1 [2] = „k”; arr1 [3] = „l”; arr1 [4] = 'm';
char *arr2 = nowy 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];
// Scalanie
dla (int i = 0; i< 5; i++)
if (ARR1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

w przeciwnym razie
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


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

delete [] arr1;
delete [] arr2;
dla (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<powrót 0;

Wyjście to:

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

Wniosek

Scalanie tablic jest w rzeczywistości prostą rzeczą. Ostatecznie dopasuj jedną tablicę z tyłu drugiej tablicy, a ty połączyłeś dwie tablice. Problemy, przed którymi stoją programiści z połączonymi tablicami, nie mają związku z dopasowaniem jednej tablicy z tyłu innej tablicy. Mają na celu usunięcie dwóch poprzednich tablic i/lub sortowanie połączonej tablicy. Tablice muszą być tego samego typu, aby zostać scalonym.

Jeśli którekolwiek z dwóch pierwszych tablic nie będzie już potrzebne po połączeniu, należy go utworzyć dynamicznie w bezpłatnym sklepie, a następnie usunąć po użyciu, aby uwolnić pamięć. Połączona tablica można również utworzyć w bezpłatnym sklepie, ale nie jest to konieczne.

Połączona tablica można sortować w innym zakresie. Pełne sortowanie to cały temat w programowaniu komputerowym. Całkowite sortowanie ma różne schematy w programowaniu komputerowym. Istnieje program o nazwie scal-sort. Ten schemat jednocześnie łączy i sortowanie. Jednak najpopularniejszym schematem wydaje się być szybki.