Archive for August, 2008

C# swapping values

Friday, August 22nd, 2008

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 🙂