Co to jest standardowa zamiana?

W programowaniu komputerowym i informatyce standardowa zamiana to sytuacja w programie, w której dwie zmienne wymagają wymiany wartości, co wymaga utworzenia trzeciej zmiennej, która będzie pośredniczyła w przekazywaniu wartości. Standardowa zamiana to paradygmat programowania, co oznacza, że ​​można ją zastosować w każdej sytuacji, w której trzeba wymienić dwie części danych, i nie jest powiązana z żadnym jednym typem danych ani językiem programowania. Istnieje wiele przypadków w programach, w których należy zamienić wartości, ale często jest to standardowy składnik w kolekcjach i tablicach, gdy jest używany z algorytmami sortowania, które muszą przenosić elementy z jednego indeksu w kolekcji do drugiego, używając zmiennej tymczasowej do przechowywania zamieniana wartość. Z punktu widzenia sprzętu standardowa zamiana może być obsługiwaną funkcją procesora niskiego poziomu dla niektórych skalarnych typów danych, takich jak liczby całkowite, co oznacza, że ​​wartość pośrednia nie musi być tworzona w pamięci o dostępie swobodnym (RAM), aby zamienić dwie liczby.

Koncepcję standardowej wymiany można zobaczyć ze zmiennymi A i B; na końcu standardowej wymiany, B powinno być równe A, a A powinno być równe B. Jeśli program po prostu przypisuje B do A, wówczas wartość A zostanie utracona i nie może być później przypisana do B. Wymaga to użycia zmienna tymczasowa, która będzie przechowywać wartość A, podczas gdy B jest przypisane do A. Ostatnim krokiem jest przypisanie wartości zmiennej tymczasowej do B, kończąc wymianę.

Jednym z bardzo powszechnych zastosowań standardowej wymiany jest użycie algorytmu sortowania w tablicy lub kolekcji. Jeżeli algorytm sortowania ustalił, że dane w tablicy Index 1 muszą zostać zamienione z danymi pod Index 10, wówczas można przeprowadzić standardową wymianę danych. Można to zrobić wyjątkowo szybko, używając odwołań wskaźnikowych w językach takich jak C.

Komplikacja może wystąpić w niektórych językach programowania obiektowego, gdy trzeba zamienić dwie instancje obiektów. W bardzo rzadkich przypadkach zwykła zamiana referencji do obiektów nie zainicjuje rzeczywistej zamiany. Zamiast tego jedynym sposobem wymiany obiektów jest sklonowanie danych wewnętrznych, pole po polu, między dwoma obiektami i tymczasową zmienną obiektu.

Istnieje jedna technika, której technicznie można użyć do przeprowadzenia standardowej wymiany przy użyciu operatora logicznego Exclusive-lub (XOR). Zamiana XOR polega na tym, że gdy dwa bity są obliczane za pomocą XOR, zasadniczo tworzą maskę, którą można odwrócić za pomocą jednego lub obu operatorów. W ten sposób dwie zmienne, A i B, można zamienić, najpierw tworząc maskę z XOR dwóch zmiennych, a następnie używając XOR do zdemaskowania najpierw wartości dla B, a następnie wartości dla A. Niestety, chociaż ta metoda unika tworzenie zmiennej tymczasowej nie spowoduje również zamiany we wszystkich przypadkach, szczególnie gdy A i B są sobie równe oraz w przypadkach, w których optymalizacja kompilatora może zmienić rzeczywistą operację.