Co je standardní výměna?
V počítačovém programování a informatice je standardní swap situace v programu, ve kterém je třeba vyměnit dvě proměnné, což vyžaduje vytvoření třetí proměnné, která bude při přenosu hodnot fungovat jako prostředník. Standardní swap je programovací paradigma, což znamená, že může být aplikováno na jakoukoli situaci, kdy je třeba vyměnit dva kusy dat a není vázáno na žádný typ dat ani programovací jazyk. Existuje mnoho příkladů v programech, ve kterých je třeba vyměňovat hodnoty, ale často se jedná o standardní komponentu ve sbírkách a polích, pokud se používají s třídícími algoritmy, které musí přesouvat položky z jednoho indexu v kolekci do druhé, pomocí dočasné proměnné, která drží hodnota je zaměňována. Z hlediska hardwaru může být standardní swap podporovanou funkcí procesoru nízké úrovně pro některé skalární datové typy, jako jsou celá čísla, což znamená, že pro výměnu dvou čísel není nutné vytvořit mezilehlou hodnotu v paměti RAM (random access memory).
Koncept standardního swapu lze vidět s proměnnými A a B; na konci standardního swapu by se B měla rovnat A a A by se měla rovnat B. Pokud program jednoduše přiřadí B k A, pak se hodnota A ztratí a nemůže být později přiřazena k B. To vyžaduje použití dočasná proměnná, která bude držet hodnotu A, zatímco B je přiřazena A. Posledním krokem je přiřazení hodnoty dočasné proměnné B, dokončení swapu.
Jednou z velmi běžných aplikací pro standardní swap je použití algoritmu třídění na poli nebo kolekci. Pokud třídicí algoritmus určil, že data v poli Index 1 musí být zaměněna s daty v Indexu 10, lze provést standardní výměna dat. To lze provést výjimečně rychle pomocí odkazů na ukazatele v jazycích, jako je C.
V některých objektově orientovaných programovacích jazycích může dojít ke komplikacím, když je třeba zaměnit dvě instance objektů. V některých velmi ojedinělých případech jednoduše výměna odkazů na objekty nezahájí skutečné výměny. Místo toho je jediným způsobem výměny objektů klonování interních dat, pole po poli, mezi dvěma objekty a proměnnou dočasného objektu.
Existuje jedna technika, kterou lze technicky použít k provedení standardního swapu pomocí exkluzivního logického operátora (XOR). XOR swap se spoléhá na skutečnost, že když se vypočítají dva bity pomocí XOR, v podstatě vytvoří masku, kterou lze obrátit jedním nebo oběma operátory. Tímto způsobem lze dvě proměnné A a B zaměnit tak, že nejprve vytvoříte masku s XOR dvou proměnných a poté pomocí XOR odmaskujete nejprve hodnotu pro B a poté hodnotu pro A. Bohužel, i když se tato metoda vyhýbá vytvoření dočasné proměnné, nebude také provádět swap ve všech případech, konkrétně když A a B jsou si navzájem rovny a v případech, kdy optimalizace kompilátoru může změnit skutečnou operaci.