Co to jest standardowa zamiana?
W programowaniu komputerowym i informatyce standardowa zamiana to sytuacja w programie, w której dwie zmienne muszą podlegać wymianie, wymagając utworzenia trzeciej zmiennej, która będzie działała jako pośrednik podczas przesyłania wartości. Standardowa zamiana jest paradygmatem programowania, co oznacza, że można ją zastosować w każdej sytuacji, w której dwie części danych muszą zostać wymienione, i nie jest powiązana z żadnym typem danych ani językiem programowania. Istnieje wiele wystąpień w programach, w których należy wymienić wartości, ale często jest to standardowy komponent w kolekcjach i tablicach, gdy jest używany z algorytmami sortowania, które muszą przenosić elementy z jednego indeksu w kolekcji, używając zmiennej tymczasowej do przechowywania zamiana wartości. Z perspektywy sprzętowej standardowa zamiana może być obsługiwaną niskopoziomową funkcją procesora dla niektórych skalarnych typów danych, takich jak liczby całkowite, co oznacza, że nie trzeba tworzyć wartości pośredniej w pamięci o dostępie swobodnym (RAM) w celu zamiany dwóch liczb.
Pojęcie standardowej zamiany można zobaczyć ze zmiennymi A i B; na końcu standardowej zamiany, 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. To wymaga użycia zmienna tymczasowa, która będzie przechowywać wartość A, podczas gdy B zostanie przypisana do A. Ostatnim krokiem jest przypisanie wartości zmiennej tymczasowej do B, kończąc zamianę.
Jedną z bardzo powszechnych aplikacji standardowej wymiany jest użycie algorytmu sortowania w tablicy lub kolekcji. Jeśli algorytm sortowania ustalił, że dane w tablicy Indeks 1 muszą zostać zamienione danymi w Indeksie 10, wówczas można wykonać standardową wymianę danych. Można to zrobić wyjątkowo szybko, używając referencji wskaźnika w językach takich jak C.
Komplikacja może wystąpić w niektórych obiektowych językach programowania, gdy trzeba zamienić dwie instancje obiektów. W niektórych bardzo rzadkich przypadkach zwykła zamiana odniesień do obiektu nie zainicjuje rzeczywistej zamiany. Zamiast tego jedynym sposobem na wymianę obiektów jest sklonowanie danych wewnętrznych, pole po polu, między dwoma obiektami i tymczasową zmienną obiektu.
Istnieje jedna technika, którą technicznie można użyć do wykonania standardowej wymiany za pomocą operatora logicznego wyłącznego lub (XOR). Zamiana XOR polega na tym, że gdy dwa bity są obliczane za pomocą XOR, zasadniczo stworzą 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 B, a następnie wartości A. Niestety, chociaż ta metoda pozwala uniknąć po utworzeniu zmiennej tymczasowej nie spowoduje to 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ę.