Übergänge und das Spielen mit Zahlen ist einer der faszinierendsten Aspekte beim Kompilieren von Array-Datenstrukturen. Wussten Sie in diesem Zusammenhang, dass Arrays zum Speichern unendlicher natürlicher Zahlen und Ziffern verwendet werden können, die bis heute entdeckt wurden?
Eine solche Zahlenkomponente, die wir in diesem Blog diskutieren werden, sind ganze Zahlen. Ganzzahlen sind Zahlen, die positiv, negativ und sogar null sein können.
In diesem Array-Problem werden wir diskutieren, wie man alle negativen Elemente an das Ende oder den Anfang eines Arrays verschiebt, indem man einfache Ansätze und Algorithmen verwendet.
>
Denken Sie daran die Reihenfolge der Elemente ist für dieses Problem nicht relevant. Wir berücksichtigen nur die negativen Elemente und platzieren sie entweder am Anfang oder am Ende der Liste.
Welche Methoden gibt es, um alle negativen Elemente auf eine Seite eines Arrays zu verschieben?
Die Arrays in der Programmierung sind eine der vielseitigsten Datenstrukturen. Dies liegt an der Tatsache, dass die Arrays von Zahlen bis hin zu Ganzzahlen das Speichern unendlich vieler positiver, negativer und sogar nullwertiger Ganzzahlen ermöglichen. Außerdem können diese Elemente innerhalb des Arrays unabhängig von ihrer allgemeinen Reihenfolge an zufälligen Positionen gespeichert werden.
Es gibt viele Algorithmen und Methoden, die beim Sortieren und Verschieben dieser Elemente innerhalb der Arrays helfen. Daher können wir sagen, dass dies eine Form der Sortierung ist, die gemäß den Anforderungen des Programms auf dem Array durchgeführt wird.
Dieses Problem wird häufig in Programmierinterviews gestellt. Im folgenden Abschnitt des Blogs werden wir diese Ansätze für alle negativen Elemente zum Ende verschieben eines Arrays.
Wie man alle Elemente in einem Array auf eine Seite verschiebt mit C?
Um zu lernen, wie man alle negativen Elemente an das Ende eines Arrays verschiebt , betrachten wir dieses Problem anhand eines Beispiels. Hier haben wir ein Eingabearray, das sowohl aus negativen als auch aus positiven ganzen Zahlen besteht.
Lassen Sie uns in diesem Abschnitt die Ansätze und Methoden diskutieren, um die negativen Elemente zu einer Seite des Arrays zu verschieben.
Input Array
1-2 3-1 8 9
Ausgabe-Array
1 9 3 8-2-1
Wie wir in der Ausgabe des Arrays sehen können, haben die negativen Elemente am Ende der Sequenz angeordnet wurden.
Beachten Sie, dass die Anordnung dieser Elemente nicht in einer perfekten Reihenfolge sein muss. Sie können in einer zufälligen Reihenfolge ausgerichtet werden, solange wir alle negativen Elemente innerhalb des Programms ans Ende verschieben.
Lassen Sie uns nun die verschiedenen Ansätze diskutieren, die für die Verschiebung angewendet werden können alle negativen Elemente am Ende des Arrays.
Methode 1: Verwenden des naiven Ansatzes
Wir beginnen damit, dass wir versuchen, dieses Problem mit dem naiven Ansatz zu lösen. Diese Methode wird allgemein auch als rekursiver Algorithmus bezeichnet, der zum Lösen verschiedener anderer Programmierprobleme sowie zum Durchführen eines Zickzack-Durchlauf des Binärbaums.
Im Zusammenhang mit dem Verschieben aller negativen Elemente an das Ende eines Arrays können wir Beginnen Sie damit, das angegebene Array in absteigender Reihenfolge zu sortieren. Auf diese Weise werden alle negativen Elemente am Ende des Arrays angehäuft. Um dies zu erreichen, können wir die Selection-Sort-Funktion implementieren, d. h. selection sort(int arr[], int n) In Mit dieser Funktion werden wir für jedes der i-ten Elemente innerhalb des Arrays versuchen, das kleinste Element innerhalb des Subarrays von i+1 herauszufinden und versuchen, ihre Werte auszutauschen, um das Array am Ende zu sortieren
Zeitkomplexität für diesen Ansatz:
O(n*log(n))
Methode 2: Verwenden des Partitionsansatzes
Jetzt bewegen wir uns in Richtung effizienter t und bequeme Ansätze. Für diese Methode verwenden wir die verschachtelten Schleifen, um nur eine einzige Traversierung durch das gesamte Array durchzuführen.
Eine einfache Methode zur Verwendung des Partitionsansatzes besteht darin, die verschachtelte Schleife für die gesamte Länge des Arrays zu implementieren und diese Schleife hilft uns dabei, die negativen Ganzzahlen zu erkennen, die an das Ende verschoben werden müssen.
So kann dieser Ansatz implementiert werden:
Sie können damit beginnen, eine Variable wie j=zu deklarieren 0 am Anfang des Arrays für arr[j] Als Nächstes iterieren wir mit dem i-Zeiger der Schleife durch die gesamten Daten. Nun werden wir bei jedem Schritt der Iteration festhalten, ob arr[i ] negativ ist oder nicht. Wenn sich herausstellt, dass es wahr ist, tauschen wir einfach das Element mit arr[j] aus und platzieren es am Anfang unseres Eingabearrays. Schließlich können Sie das Element j und seinen Wert erhöhen und diesen Prozess fortsetzen für die restlichen Elemente des Arrays
Zeitkomplexität für diesen Ansatz:
O(n)
Hier haben wir „n“ to betrachtet Länge unseres Eingabearrays sein
Methode 3: Verwenden der Variablen-oder Zeigertechnik
Wie Sie vielleicht schon erraten haben, um alle negativen Elemente an das Ende zu verschieben, als unseren dritten Ansatz werden wir zwei Variablen oder Zeiger „m“ und „n“ an den Start-und Endpositionen des Eingabearrays initialisieren.
Durch die Verwendung dieser Technik behalten wir a bei Verfolge alle Elemente innerhalb des Arrays und inkrementiere nacheinander den m-Zeiger und dekrementiere den n-Zeiger.
So würde der Algorithmus für diesen Ansatz funktionieren:
Wenn sowohl der m-als auch der n-Zeiger zeigen auf negative Elemente zeigen, dann den Wert des Elements auf m erhöhen. Wenn der Wert von Zeiger m eine positive Zahl und Zeiger n eine negative Zahl hat, dann beide Werte vertauschen. Falls beide Zeiger auf eine positive ganze Zahl hinweisen, dann dekrementiere den Zeiger n Und schließlich, wenn m auf ein negatives Element zeigt, während n auf ein positives Element zeigt, dann inkrementiere m und dekrementiere n Es gibt eine Vielzahl von Array-basierten Problemen, die mithilfe von Zeigern und dem naiven Ansatz gelöst werden können, z Diese Ansätze bieten ihren eigenen Satz von Klassen und Funktionen, die effektiv verwendet werden können, um die Zeitkomplexität des Problems zu reduzieren.