Wie verschmelzen Sie Arrays in C++?

Wie verschmelzen Sie Arrays in C++?
Angenommen, Sie haben eine Reihe von 5 Zeichen und eine weitere Reihe von 8 Zeichen. Wenn diese beiden Arrays zu einem Array kombiniert werden, wurden beide Arrays zusammengeführt. Das Neue Array hätte 13 Zeichen (= 5 + 8). Die Reihenfolge, in der die verschiedenen Array -Elemente im Neuarray angeordnet sind, spielt keine Rolle. Und das verschmelzen von zwei Arrays.

In C ++ gibt es ein technisches Problem, in dem Sinne, dass drei Arrays anstelle des einen neuen zusammengeführten Array resultieren. Wäre es nicht schön, die alten beiden Arrays nach dem Zusammenführen und die kostenlose ungenutzte Erinnerung zu löschen? C ++ hat zwei Möglichkeiten, zwei Arrays zu verschmelzen: Wenn die beiden Arrays zusammengeführt werden, verwendeten sie dynamische Speicher, dann können sie gelöscht werden, um mit einem Array zu enden; Andernfalls endet der Programmierer mit drei Arrays.

Es ist gut, Arrays zu verschmelzen, indem sie letztendlich nur den anderen an der Rückseite des anderen anpasst. Es kann jedoch besser sein, eine minimale Sortierung zu haben, wenn die Arrays zusammengeführt werden. Sortieren als Ganzes ist ein ganzes Thema in der Programmierung. Sortieren als Ganzes wird in diesem Artikel nicht behandelt. Eine sehr einfache minimale Sortierung wird jedoch angesprochen.

In diesem Artikel wird erklärt. Einige minimale Sortierungen werden ebenfalls berücksichtigt. Um zwei Arrays zusammenzuführen, müssen die beiden Arrays vom gleichen Typ sein.

Das Verfahren zum Zusammenführen von zwei Arrays kann auf mehr als zwei Arrays ausgedehnt werden.

Artikelinhalt

  • Zusammenführen von Arrays ohne kostenlosen Laden
  • Zusammenführen von Arrays mit kostenlosen Laden
  • Abschluss

Zusammenführen von Arrays ohne kostenlosen Laden

Zusammenführung ohne Sortieren

Betrachten Sie die folgenden zwei Arrays:

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

Der erste hat 5 Elemente und der zweite hat 8 Elemente. Wenn die Elemente des zweiten Arrays irgendwie auf der Rückseite des ersten Arrays angepasst werden, wird ein Array von 13 Elementen gebildet. Um dies zu erreichen, ohne den kostenlosen Speicher (dynamischer Speicher) zu verwenden, muss zuerst ein drittes Array von 13 leeren Werten erstellt werden. Dann werden die 5 Werte des ersten Arrays an die ersten 5 Stellen des dritten Arrays kopiert. Die 8 Werte des zweiten Arrays werden als nächstes in die verbleibenden 8 Positionen des dritten Arrays kopiert. Das dritte Array wird zum zusammengeführten und gewünschten Array. Das folgende Programm zeigt dies:

#enthalten
Verwenden von Namespace STD;
int main ()

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

für (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

für (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<Rückkehr 0;

Die Ausgabe ist:

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

Beachten Sie, wie die Indizierung in den Schleifen verwendet wurde. Das Problem mit diesem Schema ist, dass die ersten beiden Arrays überflüssig geworden sind. Sie belegen jetzt unnötig den Speicher des Computers. Ohne kostenlosen Speicher (dynamischer Speicher) können Arrays erst dann aus dem Speicher entfernt werden, wenn sie den Geltungsbereich verlassen. Um dieses Problem zu lösen, verwenden Sie den kostenlosen Laden - siehe unten.

Das erste Codesegment enthält die iOstream -Bibliothek und deklariert die Verwendung des Standard -Namespace für den Rest des Programms. Der Rest des Programms befindet sich in der main () -Funktion. Die ersten drei Aussagen in der Funktion main () deklarieren die ersten, zweiten und dritten Arrays. Das nächste Code-Segment ist eine Vorstellung, die alle Elemente vom kleineren Array zum dritten Array kopiert. Die größere Auswahl der ersten beiden hätte zuerst kopiert werden können; Das ist egal.

Im nächsten Codesegment kopiert das größere Array auf der Rückseite des kleineren Arrays im dritten Array. Das dritte Array ist das zusammengeführte Array. Die Summe der Anzahl der Elemente in den ersten beiden Arrays sollte der Anzahl der Elemente im dritten Array entsprechen. Das letzte Codesegment zeigt die Werte im dritten Array an.

Mit einer Sortierung verschmelzen

Während des Einsetzens von Elementen in das dritte Array können zu Beginn die ersten Elemente beider Arrays verglichen und der kleinere Wert zuerst vor dem ersten Wert des anderen Arrays eingefügt werden. Die zweiten Elemente beider Arrays können als nächstes verglichen werden, und der kleinere Wert wird vor dem zweiten Wert des anderen Arrays eingefügt, das eingefügt wird. Die dritten Elemente beider Arrays können als nächstes verglichen werden, und der kleinere Wert wird vor dem dritten Wert des anderen Arrays eingefügt. Dieses Verfahren wird fortgesetzt, bis alle Elemente des kürzeren Arrays neben der gleichen Anzahl von Elementen des längeren Arrays eingefügt werden. Der Rest der Elemente des längeren Arrays kann einfach in der Reihenfolge in das dritte Array gedrückt werden. Das folgende Programm zeigt dies:

#enthalten
Verwenden von Namespace STD;
int main ()

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

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


für (int i = 5; i< 8; i++)
arr3 [i+5] = arr2 [i];

für (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<Rückkehr 0;

Die Ausgabe ist:

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

Beachten Sie die in den Indizes verwendete Arithmetik.

Zusammenführen von Arrays mit kostenlosen Laden

Zusammenführung ohne Sortieren

Der kostenlose Speicher wird einem Programm, das verwendet werden, zu vergeben, wenn es zusätzlichen Speicher benötigt. Ein Array kann im kostenlosen Geschäft mit dem neuen [] Betreiber bzw. dem Delete [] -Operator erstellt und gelöscht werden. Die beiden oben genannten Programme werden unten wiederholt. Die erste und zweite Arrays werden dynamisch im kostenlosen Laden erstellt und nach dem dritten Zusammenhang gelöscht. Das dritte Array wird im normalen Speicher (Bereich) erstellt.

Das folgende Programm zeigt dies für das Zusammenführen ohne Sortierung:

#enthalten
Verwenden von 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];
// Zusammenführung
für (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

für (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

löschen [] arr1;
löschen [] arr2;
für (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<Rückkehr 0;

Die Ausgabe ist:

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

Der Name der Arrays im kostenlosen Laden sind Zeiger. Die Standorte der Elemente von arr1 und arr2 wurden nach ihrer Verwendung im Programm gelöscht. Der Rest des Codes ist wie ein früherer.

Mit einer Sortierung verschmelzen

Das vorherige Programm mit einer Sortierung wird hier wiederholt. Hier werden jedoch die erste und zweite Arrays im kostenlosen Laden erstellt. Sie werden nach ihrer Verwendung gelöscht. Das Programm ist:

#enthalten
Verwenden von 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];
// Zusammenführung
für (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

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


für (int i = 5; i< 8; i++)
arr3 [i+5] = arr2 [i];

löschen [] arr1;
löschen [] arr2;
für (int i = 0; i< 13; i++)
Cout<< arr3[i] << ";

Cout<Rückkehr 0;

Die Ausgabe ist:

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

Abschluss

Das Zusammenführen von Arrays ist eigentlich eine einfache Sache. Passen Sie letztendlich ein Array auf der Rückseite des anderen Arrays an, und Sie haben die beiden Arrays verschmolzen. Die Probleme, die Programmierer mit Verschmelzungsarrays ausgesetzt sind. Sie haben damit zu tun, die beiden vorherigen Arrays zu löschen und/oder das zusammengeführte Array zu sortieren. Arrays müssen vom gleichen Typ sein, um zusammengeführt zu werden.

Wenn einer der ersten beiden Arrays nach dem Zusammenführen nicht mehr benötigt wird, sollte er dynamisch im kostenlosen Geschäft erstellt und nach dem Gebrauch dann zum freien Speicher gelöscht werden. Das zusammengeführte Array kann auch im kostenlosen Laden erstellt werden, aber das ist nicht notwendig.

Das zusammengeführte Array kann in unterschiedlichem Maße sortiert werden. Die vollständige Sortierung ist ein ganzes Thema in der Computerprogrammierung. Die vollständige Sortierung enthält unterschiedliche Schemata in der Computerprogrammierung. Es gibt ein Programm namens Merge-Sort. Dieses Schema fusioniert und sortiert gleichzeitig. Das beliebteste Schema scheint jedoch Quicksort zu sein.