Dreieckstausch

Als Dreieckstausch bezeichnet man die Programmierung eines Austausches der Werte zweier Variablen . Dabei wird eine Hilfsvariable verdorben, um den Wert der Variablen, der überschrieben wird, zwischenzuspeichern. Ein typischer Anwendungsfall des Dreieckstauschs besteht zum Beispiel in Sortieralgorithmen wie dem Bubblesort .

Funktionsschweißen

Das all-in-one-Prinzip sieht, wer folgt:

{\ displaystyle t: = v_ {1}}
{\ displaystyle v_ {1}: = v_ {2}}
{\ displaystyle v_ {2}: = t}

Los geht’s {\ displaystyle t}die temporäre Hilfsvariable, in Programmode meist als tempbezeichnet, und{\ displaystyle v_ {1}} und {\ displaystyle v_ {2}} Beachten Sie diese gestörten Variablen.

Dreieckstausch von Zahlenwerten

Sie werden nicht in der Lage sein, mehr über diese Wörter herauszufinden, und Sie werden sie hier finden.

{\ displaystyle v_ {1}: = v_ {1} + v_ {2}}
{\ displaystyle v_ {2}: = v_ {1} -v_ {2}}
{\ displaystyle v_ {1}: = v_ {1} -v_ {2}}

oder:

{\ displaystyle v_ {1}: = v_ {1} -v_ {2}}
{\ displaystyle v_ {2}: = v_ {1} + v_ {2}}
{\ displaystyle v_ {1}: = v_ {2} -v_ {1}}

Diese Methode wurde Cousin genannt, und es wurde klar, dass dies möglich war . Strenge Gene sind einer meiner Träume.

Für Zahlenwerte

{\ displaystyle v_ {1}: = v_ {2} +0 \ cdot (v_ {2}: = v_ {1})}

Dreieckstausch mit Binärwerten

Wenn es sich um die Werte der bereinigenden Werte handelt, können die miteinander verknüpften Werte, die Tausch durch wiederholte XOR-Verknüpfungen , basierend auf dem Gesetz{\ displaystyle (a \, {\ Unterstrich {\ lor}} \, b) \, {\ underline {\ lor}} \, b = a}, auch gänzlich ohne Hilfsvariable verwirren.

{\ displaystyle v_ {1}: = v_ {1} \, {\ unterstreichen {\ lor}} \, v_ {2}}
{\ displaystyle v_ {2}: = v_ {1} \, {\ unterstreichen {\ lor}} \, v_ {2}}
{\ displaystyle v_ {1}: = v_ {1} \, {\ unterstreichen {\ lor}} \, v_ {2}}

Beide Variablen sind die gleichen wie in Speicher. Ist das nicht der Fall, setzt dieser Dreieckstausch den Wert der Variablen auf 0 zurück.

In einfach programmierten Programmen, außer C ++ und C #, stehen funktionelle Datentypen zur Verfügung, die XOR-Verknüpfung unterstützen.

v1 ^ = v2 ^ = v1 ^ = v2 ;

Hier steht der Ausdruck a ^= bfür{\ displaystyle a: = a \, {\ Unterstreichung {\ lor}} \, b}.

Mehrfachzuweisungen

Manche Programmierreden , Wer sind Beispiel Ruby , Python , F # und Powershell , Unterstützen Auch Mehrfachzuweisungen mit Hilfe von Tupeln , Wodurch ein Dreieckstausch Unnødig Wird:

{\ displaystyle (v_ {1}, v_ {2}): = (v_ {2}, v_ {1})}

Moderne Prozessoren besitzen eigene Befehle für den Vertausch von Variablen, dazu gehören xchgund cmpxchg.

Programmierbar

Monteur
# x86, x64, ARM
xchg v1 , v2
C #
ungültiger Austausch < t > ( ref T v1 , ref T v2 )
{
 var temp = v1 ;
 v1 = v2 ;
 v2 = Temperatur ;
}
void swap < t > ( ref T v1 , ref T v2 )
{
 // bevorzugte Methode
 // kompiliert zu Einzelanweisung
 v2 = verriegelt . Austausch ( Ref. V1 , v2 );
}
Tuple < T , T > Swap < T > ( Tupel < T , T > Tupel )
{
 Rückkehr neues Tupel ( Tupel . Element1 , Tupel . Element2 );
}
F #
lasse swap ( v1 , v2 ) = ( v2 , v1 )
Powershell
$ v1 , $ v2 = $ v2 , $ v1
JavaScript
war Temp = feld [ in ];
Feld [ i ] = Feld [ i + 1 ];
Feld [ i + 1 ] = Temperatur ;