Välistavat võid kasutav vahetusalgoritm

Allikas: Vikipeedia
(Ümber suunatud leheküljelt XOR vahetus algoritm)

Programmeerimises on XOR vahetus algoritm, mis kasutab bitikaupa XOR (välistav või) operaatoreid, et vahetada kahe muutuja väärtused, ilma ajutise lisamuutujata (muutujad peavad omama sama andmetüüpi).

Sisukord

[redigeeri] Algoritm

Standardne vahetus algoritm vajab vahemuutujat, kuhu salvestada korraks muutujad salvestada. Kasutades XOR vahetust aga vahemuutjat vaja ei lähe: standard algoritm on järgmine (Lambda keeles):

X := X XOR Y
Y := X XOR Y
X := X XOR Y

Siiski, eksisteerib reaalne oht, kui X ja Y on sünonüümid, siis sellega nullitakse väärtused.

[redigeeri] Koodi näited

Tähelepanu, et argumentidena saadud täisarve ei vahetata koheselt, vaid esmalt kontrollitakse, kas nende asukohad mälus on erinevad (kas tegemist on sama väärtusega, mis ka omab sama mälu viita). See eemaldab probleemi, mille võib põhjustada pseudonüüm.

[redigeeri] C

C funktsioon, mis implementeerib XOR vahetuse algoritmi:

void xorVahetus (int *x, int *y)
{
  if (x != y) {
    *x ^= *y;
    *y ^= *x;
    *x ^= *y;
  }
}

[redigeeri] Vaata ka

Personaalsed tööriistad
Nimeruumid

Variandid
Toimingud
Navigeerimiskast
Trüki või ekspordi
Tööriistad
Teistes keeltes