We have always learned that swapping values in programming is easily done by having a 'helper' value.
Because if you do not use a helper value you will get the following problem:
c#:
{
a = 1;
b = 2;
a = b; // a now holds 2
b = a; // b now also holds 2 -> not what we want.
}
When using a 'helper' value this will work better, like this:
c#:
{
a = 1;
b = 2;
// swap values:
temp = a; // temp to hold 1
a = b; // a now holds 2
b = temp; // b now holds 1
}
But still, do we actually NEED a helper value?
It turns out we do not have to use it, if we make use of some simple mathematic characteristics.
c#:
{
// swap without temp value:
int a = 1;
int b = 2;
a = a + b; // 1 + 2 = 3 (a holds the total)
b = a – b; // 3 – 2 = 1 (b now holds original value of a)
a = a – b; // 3 – 1 = 2 (total minus original value of a gives original value of b)
}
This will of course also work for doubles/floats. But be carefull for overflows though 🙂