Swap three variables without using temporary variable
Last Updated :
04 Nov, 2021
Given three variables, a, b and c, swap them without temporary variable.
Example :
Input : a = 10, b = 20 and c = 30
Output : a = 30, b = 10 and c = 20
Method 1 (Using Arithmetic Operators)
The idea is to get sum in one of the two given numbers. The numbers can then be swapped using the sum and subtraction from sum.
We have already discussed swapping two variables here. We can extend the same approaches
C++
#include <iostream>
using namespace std;
void swapThree( int &a, int &b, int &c)
{
a = a + b + c;
b = a - (b+c);
c = a - (b+c);
a = a - (b+c);
}
int main()
{
int a = 10, b = 20, c = 30;
cout << "Before swapping a = " << a << ", b = "
<< b << ", c = " << c << endl;
swapThree(a, b, c);
cout << "After swapping a = " << a << ", b = "
<< b << ", c = " << c << endl;
return 0;
}
|
Java
class GFG
{
static int a, b, c;
static void swapThree()
{
a = a + b + c;
b = a - (b + c);
c = a - (b + c);
a = a - (b + c);
}
public static void main(String []args)
{
a = 10 ; b = 20 ; c = 30 ;
System.out.println( "Before swapping a = " +
a + ", b = " + b +
", c = " + c);
swapThree();
System.out.println( "After swapping a = " +
a + ", b = " + b +
", c = " + c);
}
}
|
Python3
def swapThree(a, b, c):
a = a + b + c
b = a - (b + c)
c = a - (b + c)
a = a - (b + c)
print ( "After swapping a =" ,a, ", b =" ,b, ", c =" ,c)
if __name__ = = '__main__' :
a = 10
b = 20
c = 30
print ( "Before swapping a =" ,a, ", b =" ,b, ", c =" ,c)
swapThree(a, b, c)
|
C#
using System;
class GFG
{
static void swapThree( ref int a,
ref int b,
ref int c)
{
a = a + b + c;
b = a - (b + c);
c = a - (b + c);
a = a - (b + c);
}
static void Main(String []args)
{
int a = 10, b = 20, c = 30;
Console.WriteLine( "Before swapping a = " +
a + ", b = " + b +
", c = " + c);
swapThree( ref a, ref b, ref c);
Console.Write( "After swapping a = " +
a + ", b = " + b +
", c = " + c);
}
}
|
PHP
<?php
function swapThree(& $a , & $b , & $c )
{
$a = $a + $b + $c ;
$b = $a - ( $b + $c );
$c = $a - ( $b + $c );
$a = $a - ( $b + $c );
}
$a = 10; $b = 20; $c = 30;
echo "Before swapping a = " , $a ,
", b = " , $b , ", c = " ,
$c , "\n" ;
swapThree( $a , $b , $c );
echo "After swapping a = " , $a ,
", b = " , $b ,
", c = " , $c , "\n" ;
?>
|
Javascript
<script>
let a, b, c;
function swapThree()
{
a = a + b + c;
b = a - (b + c);
c = a - (b + c);
a = a - (b + c);
}
a = 10; b = 20; c = 30;
document.write( "Before swapping a = " +
a + ", b = " + b +
", c = " + c);
swapThree();
document.write( "<br>After swapping a = " +
a + ", b = " + b +
", c = " + c);
</script>
|
Output :
Before swapping a = 10, b = 20, c = 30
After swapping a = 30, b = 10, c = 20
Time Complexity: O(1)
Auxiliary Space: O(1)
Thanks to Mazhar MIK for suggesting this method.
Method 2 (Using Bitwise XOR)
The bitwise XOR operator can be used to swap three variables. The idea is similar to method 1. We first store XOR of all numbers in ‘a’. Then we get individual numbers by doing XOR of this with other two numbers.
C++
#include <iostream>
using namespace std;
void swapThree( int &a, int &b, int &c)
{
a = a ^ b ^ c;
b = a ^ b ^ c;
c = a ^ b ^ c;
a = a ^ b ^ c;
}
int main()
{
int a = 10, b = 20, c = 30;
cout << "Before swapping a = " << a << ", b = "
<< b << ", c = " << c << endl;
swapThree(a, b, c);
cout << "After swapping a = " << a << ", b = "
<< b << ", c = " << c << endl;
return 0;
}
|
Java
class GFG
{
static int a, b, c;
static void swapThree()
{
a = a ^ b ^ c;
b = a ^ b ^ c;
c = a ^ b ^ c;
a = a ^ b ^ c;
}
public static void main(String[] args)
{
a = 10 ;
b = 20 ;
c = 30 ;
System.out.println( "Before swapping a = " + a +
", b = " + b + ",c = " + c);
swapThree();
System.out.println( "After swapping a = " + a +
", b = " + b + ", c = " + c);
}
}
|
Python3
def swapThree(a, b, c) :
a[ 0 ] = a[ 0 ] ^ b[ 0 ] ^ c[ 0 ]
b[ 0 ] = a[ 0 ] ^ b[ 0 ] ^ c[ 0 ]
c[ 0 ] = a[ 0 ] ^ b[ 0 ] ^ c[ 0 ]
a[ 0 ] = a[ 0 ] ^ b[ 0 ] ^ c[ 0 ]
a, b, c = [ 10 ], [ 20 ], [ 30 ]
print ( "Before swapping a = " , a[ 0 ],
", b = " , b[ 0 ], ", c = " , c[ 0 ])
swapThree(a, b, c)
print ( "After swapping a = " , a[ 0 ],
", b = " , b[ 0 ], ", c = " , c[ 0 ])
|
C#
using System;
class GFG
{
static void swapThree( ref int a,
ref int b,
ref int c)
{
a = a ^ b ^ c;
b = a ^ b ^ c;
c = a ^ b ^ c;
a = a ^ b ^ c;
}
static void Main(String []args)
{
int a = 10, b = 20, c = 30;
Console.WriteLine( "Before swapping a = " +
a + ", b = " + b +
",c = " + c);
swapThree( ref a, ref b, ref c);
Console.Write( "After swapping a = " +
a + ", b = " + b +
", c = " + c);
}
}
|
PHP
<?php
function swapThree(& $a , & $b , & $c )
{
$a = $a ^ $b ^ $c ;
$b = $a ^ $b ^ $c ;
$c = $a ^ $b ^ $c ;
$a = $a ^ $b ^ $c ;
}
$a = 10; $b = 20; $c = 30;
echo "Before swapping a = " , $a , ", b = " ,
$b , ", c = " , $c , "\n" ;
swapThree( $a , $b , $c );
echo "After swapping a = " , $a , ", b = " ,
$b , ", c = " , $c , "\n" ;
#This code is contributed by ajit
?>
|
Javascript
<script>
var a, b, c;
function swapThree()
{
a = a ^ b ^ c;
b = a ^ b ^ c;
c = a ^ b ^ c;
a = a ^ b ^ c;
}
a = 10;
b = 20;
c = 30;
document.write( "Before swapping a = " + a +
", b = " + b + ", c = " + c);
swapThree();
document.write( "<br>" )
document.write( "After swapping a = " + a +
", b = " + b + ", c = " + c);
</script>
|
Output:
Before swapping a = 10, b = 20, c = 30
After swapping a = 30, b = 10, c = 20
Time Complexity: O(1)
Auxiliary Space: O(1)
The method 1 causes overflow for large values of a, b and c, while method 2 doesn’t.
Share your thoughts in the comments
Please Login to comment...