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 temp
bezeichnet, 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 ^= b
fü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 xchg
und 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 ;