Swap

In this post I be  three popular techniques to swap the values of two variables.

swap

Swap

To swap two variables means to interchange their values. In this post we will see three methods to swap the contents of two variables, viz. using a third variable, using addition/subtraction operator and XOR swap.

Swap the contents of two variables using a third variable

This is the simplest and the most intuitive way to swap two variables. An analogy would make this clear without actually writing a single line of code. Let’s say we have two glasses filled with water and orange juice. In order to interchange the contents of two glasses a third glass would be required to hold the contents of one of the glass temporarily before the final interchange can take place.

The Java program to swap the contents of two variables using a third variables would be as follows:

class Swap{
    public static void main( String args[] ){
        int a, b, temp;
        a=1;
        b=2;
        System.out.println("a = " + a + ", b = " + b );
        temp = a;
        a = b;
        b = temp;
        System.out.println("a = " + a + ", b = " + b );
    }
}

The output of the above program would be as follows:

a = 1, b = 2
a = 2, b = 1

Swap the contents of two variables without using a third variable

The content of two variables can also be swapped without using the third variable by clever use of addition and subtraction operators ( sometimes called ‘additive swap’). Let’s assume that the two integer variables  storing the values 1 and 2 respectively.

 A B
 initial value 1 2
b = a + b 1 3
a = b – a 2 3
b = b – a 2 1

The Java program to swap the contents of two variables without using a third variables would be as follows:

class Swap{
    public static void main( String args[] ){
        int a, b;
        a=1;
        b=2;
        System.out.println("a = " + a + ", b = " + b );
        b = a + b;
        a = b - a;
        b = b - a;
        System.out.println("a = " + a + ", b = " + b );
    }
}

The output of the above program would be as follows:

a = 1, b = 2
a = 2, b = 1

Swap the contents of two variables using XOR swap

Let me first give a recap of XOR operator before we dwell into the details of swapping the contents two variables using XOR.

XOR is a logical operation that outputs true whenever both inputs differ (one is true, the other is false). In Java XOR can performed on the individual bits of any variable by using bitwise XOR (^).

XOR Truth Table
Input Output
A B
0 0 0
0 1 1
1 0 1
1 1 0

The procedure to swap using XOR swap is as follows:

A B
initial value 0001 0010
a = a ^ b 0011 0010
b = a ^ b 0011 0001
a = a ^ b 0010 0001

The idea behind this is that when you XOR two values, the resultant is actually a combination of both the values, meaning that if we XOR either of two values with the result we can get back the other one.  The Java implementation to swap the content of two integer variables using XOR swap is as follows:

class Swap{
    public static void main( String args[] ){
        int a, b;
        a=1;
        b=2;
        System.out.println("a = " + a + ", b = " + b );
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("a = " + a + ", b = " + b );
    }
}

Pros and cons of the three swapping techniques

Swapping contents of two variables using a third is usually the preferred choice because it’s intuitive and works in all cases. The only disadvantage is that it requires extra memory.

Swapping the contents of two variables using the additive technique is avoided in practise because it doesn’t work in all the cases. This method fails to produce correct results in case of overflow and underflow conditions, meaning , that if the sum or the difference of the two variables is such that it is more or less than what could be stored in the concerned data type, you will get incorrect results.

Swapping the contents of two variables using the XOR technique doesn’t suffer from any deficiency, it’s fast and it works in all the cases. The only disadvantage is that is not very intuitive.

Follow me

Vinay Singh

Computer Teacher at Saint John's Academy
I am a GNU/Linux enthusiast and a computer science teacher by profession based at Allahabad, India. My hobbies include reading (mostly computer related stuff) and photography.
Follow me

Latest posts by Vinay Singh (see all)

4 thoughts on “Swap

  1. Pavan Srivastava

    Thank you Sir, for sharing the knowledge,
    Sir, I have an another technique too to swap the values of the two variables.

    Reply
    1. Vinay Singh Post author

      I am assuming that you are most probably thinking somthing on the lines of:
      a=(a*b)
      b=(a/b)
      a=(a/b)
      If yes, then I consider it to be another variation of the additive technique. If no, then please share the technique so that other viewers can also benefit from the same.
      🙂
      Last but not the least, thank you for the complement.

      Reply
  2. Mayank Singh

    Swapping arithmetically, is generally not a good method unless the exact values to be swapped is known, as resulting “a” from expression “a = a + b” might have a size larger than the data
    type of “a”, happened to me some times back.

    XOR is best, as it does swapping “in-place”, most optimized too!! 😀

    Reply
    1. Vinay Singh Post author

      That’s exactly what I mentioned in the second largest paragraph. Swapping arithmetically, either using addition/subtraction or multiplication division, is more of an intellectual exercise rather than a practical tool. It’s intellectual only when you are aware of the limitations!

      Reply

Leave a Reply