sábado, 21 de noviembre de 2009

Intercambiar dos variables sin el uso de otra auxiliar.

A todo el que ha estudiado programación le han enseñado como intercambiar dos variables del siguiente modo:

aux = x;
x = y;
y = aux;

En este código utilizamos una variable auxiliar que nos sirve para no perder el valor de "x" al sobreescribirlo con el valor de "y" y asi poder intercambiar.

Navegando por ahí he encontrado cosas muy interesantes sobre otros modos de hacer esto sin la necesidad de una tercera variable. Algo que, de entrada, a cualquier estudiante de programación básica, le parecería imposible.

No contento con una solución, os explicaré dos soluciones:

  • En la primera utilizamos la aritmética básica. El código es el siguiente:

x = x + y;
y = x - y;
x = x - y;


Como vemos, no se hace uso de ninguna otra variable y consigue muy bien su cometido. La única desventaja que le veo a este método sería que para valores muy grandes de "x" y "y", al hacer la suma, se podría provocar un overflow en la variable "x" y todo se fastidiaría.
Por eso debemos tener en cuenta que este método se utilice sólo para valores en los que sepamos de antemano que esto no sucederá.

  • En la segunda solución utilizamos el álgebra de bool:

Se trata de utilizar la operación binaria “XOR”. Aqui está el código:

a ^= b;
b ^= a;
a ^= b;


También lo podemos hacer en una línea:

a ^= b ^= a ^= b;


Este código es mágnifico. De nuevo, la única desventaja es que no es portable. Asi que cuidado ;)

1 comentario:

Aichan dijo...

Hola pekeño!! Gracias x pasarte a ver al pinguinito Omarito jejeje. Tratalo bien eeeh? :P no me lo tires mas al agua que se resfria xDD. Xcierto...no entiendo una mierda eso de a ^= b..ni nada xDDD jejeje. El panda moooolaa cacho! :D