www.wikidata.de-de.nina.az
Als Dreieckstausch bezeichnet man in der Programmierung ein Verfahren zum Austausch der Werte zweier Variablen Dabei wird eine Hilfsvariable verwendet um den Wert der Variablen die zuerst uberschrieben wird zwischenzuspeichern Ein typischer Anwendungsfall des Dreieckstauschs besteht zum Beispiel in einigen Sortieralgorithmen wie dem Bubblesort Inhaltsverzeichnis 1 Funktionsweise 2 Dreieckstausch von Zahlenwerten 3 Dreieckstausch mit Binarwerten 4 Mehrfachzuweisungen 5 ProgrammbeispieleFunktionsweise BearbeitenDas allgemeine Prinzip sieht wie folgt aus t v 1 displaystyle t v 1 nbsp v 1 v 2 displaystyle v 1 v 2 nbsp v 2 t displaystyle v 2 t nbsp Hierbei ist t displaystyle t nbsp die temporare Hilfsvariable in Programmcode meist als temp bezeichnet und v 1 displaystyle v 1 nbsp und v 2 displaystyle v 2 nbsp sind die zu vertauschenden Variablen Dreieckstausch von Zahlenwerten BearbeitenZwei weitere Moglichkeiten zum Tauschen von Ordinalen ohne Hilfsvariablen besteht im wiederholten Addieren und Subtrahieren v 1 v 1 v 2 displaystyle v 1 v 1 v 2 nbsp v 2 v 1 v 2 displaystyle v 2 v 1 v 2 nbsp v 1 v 1 v 2 displaystyle v 1 v 1 v 2 nbsp oder v 1 v 1 v 2 displaystyle v 1 v 1 v 2 nbsp v 2 v 1 v 2 displaystyle v 2 v 1 v 2 nbsp v 1 v 2 v 1 displaystyle v 1 v 2 v 1 nbsp Diese Methode sollte nicht bei Gleitkommazahlen eingesetzt werden da es zu Ausloschungen kommen kann Streng genommen handelt es sich nicht mehr um einen Dreieckstausch Fur Zahlenwerte funktioniert ausserdem v 1 v 2 0 v 2 v 1 displaystyle v 1 v 2 0 cdot v 2 v 1 nbsp Dreieckstausch mit Binarwerten BearbeitenWenn es sich bei den Werten der beiden auszutauschenden Variablen um binar verknupfbare Werte handelt kann man den Tausch durch wiederholte XOR Verknupfungen basierend auf dem Gesetz a b b a displaystyle a underline lor b underline lor b a nbsp auch ganzlich ohne Hilfsvariable verwirklichen v 1 v 1 v 2 displaystyle v 1 v 1 underline lor v 2 nbsp v 2 v 1 v 2 displaystyle v 2 v 1 underline lor v 2 nbsp v 1 v 1 v 2 displaystyle v 1 v 1 underline lor v 2 nbsp Die beiden Variablen mussen dazu allerdings an verschiedenen Stellen im Speicher liegen Ist das nicht der Fall setzt dieser Dreieckstausch den Wert der Variablen auf 0 zuruck In einigen Programmiersprachen unter anderem C und C funktioniert auf Datentypen welche die binare XOR Verknupfung unterstutzen die Anweisung v1 v2 v1 v2 Hierbei steht der Ausdruck a b fur a a b displaystyle a a underline lor b nbsp Mehrfachzuweisungen BearbeitenManche Programmiersprachen wie zum Beispiel Ruby Python F und Powershell unterstutzen auch Mehrfachzuweisungen mit Hilfe von Tupeln wodurch ein Dreieckstausch unnotig wird v 1 v 2 v 2 v 1 displaystyle v 1 v 2 v 2 v 1 nbsp Moderne Prozessoren besitzen zudem eigene Befehle fur den Vertausch von Variablen dazu gehoren xchg und cmpxchg Programmbeispiele BearbeitenAssembler x86 x64 ARM xchg v1 v2 C void Swap lt T gt ref T v1 ref T v2 var temp v1 v1 v2 v2 temp void Swap lt T gt ref T v1 ref T v2 preferred method compiles to single instruction v2 Interlocked Exchange ref v1 v2 Tuple lt T T gt Swap lt T gt Tuple lt T T gt tuple return new Tuple tuple Item1 tuple Item2 F let swap v1 v2 v2 v1 Powershell v1 v2 v2 v1 JavaScriptvar temp feld i feld i feld i 1 feld i 1 temp Pythonx y y x Abgerufen von https de wikipedia org w index php title Dreieckstausch amp oldid 220398928