Intercambiar dos variables en una línea

Hemos discutido diferentes enfoques para intercambiar dos enteros sin la variable temporal . ¿Cómo cambiar a una sola línea sin usar la función de biblioteca?
1) Python: en Python, hay una construcción simple y sintácticamente ordenada para intercambiar variables, solo necesitamos escribir «x, y = y, x».
2) C/C++: a continuación se muestra una solución clásica generalmente proporcionada: 

// Swap using bitwise XOR (Wrong Solution in C/C++)
x ^= y ^= x ^= y; 

La solución anterior es incorrecta en C/C++ ya que provoca un comportamiento indefinido (el compilador es libre de comportarse de cualquier forma). El motivo es que modificar una variable más de una vez en una expresión provoca un comportamiento indefinido si no hay un punto de secuencia entre las modificaciones. 
Sin embargo, podemos usar una coma para introducir puntos de secuencia. Entonces la solución modificada es 

// Swap using bitwise XOR (Correct Solution in C/C++)
// sequence point introduced using comma.
(x ^= y), (y ^= x), (x ^= y);

3) Java: En Java, las reglas para las evaluaciones de subexpresiones están claramente definidas. El operando de la izquierda siempre se evalúa antes que el operando de la derecha. En Java, la expresión “x ^= y ^= x ^= y;” no produce el resultado correcto según las reglas de Java. Hace x = 0. Sin embargo, podemos usar «x = x ^ y ^ (y = x);» Tenga en cuenta que las expresiones se evalúan de izquierda a derecha. Si x = 5 e y = 10 inicialmente, la expresión es equivalente a “x = 5 ^ 10 ^ (y = 5);”. Tenga en cuenta que no podemos usar esto en C/C++ como en C/C++, no está definido si cualquier operador ejecuta el operando izquierdo o el operando derecho (consulte esto para obtener más detalles).

4) JavaScript: al usar la asignación de destrucción, podemos simplemente lograr el intercambio usando esta línea. 

[x,y]=[y,x]

C

// C program to swap two variables in single line
#include <stdio.h>
int main()
{
    int x = 5, y = 10;
    (x ^= y), (y ^= x), (x ^= y);
    printf("After Swapping values of x and y are %d %d", x,
           y);
    return 0;
}

C++

// C++ code to swap using XOR
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int x = 5, y = 10;
    // Code to swap 'x'  and 'y'
    // to swap two numbers in one
    // line
     x = x ^ y, y = x ^ y, x = x ^ y;
    // printing the swapped variables
    cout << "After Swapping: x = "
         << x << ", y= " << y;
    return 0;
}

Java

// Java program to swap two variables in a single line
class GFG {
    public static void main(String[] args)
    {
        int x = 5, y = 10;
        x = x ^ y ^ (y = x);
        System.out.println(
            "After Swapping values"
            +" of x and y are " + x
            + " " + y);
    }
}

Python3

# Python program to swap two variables in a single line
x = 5
y = 10
x, y = y, x
print("After Swapping values of x and y are", x, y)

C#

// C# program to swap two
// variables in single line
using System;
 
class GFG {
    static public void Main()
    {
        int x = 5, y = 10;
        x = x ^ y ^ (y = x);
        Console.WriteLine("After Swapping values "
                          + "of x and y are " + x + " "
                          + y);
    }
}
 
// This code is contributed by aj_36

PHP

<?php
// PHP program to swap two
// variables in single line
 
    // Driver Code
    $x = 5;
    $y = 10;
    ($x ^= $y);
    ($y ^= $x);
    ($x ^= $y);
    echo "After Swapping values of x and y are "
                                  ,$x," ", $y;
 
// This code is contributed by Vishal Tripathi
?>

Javascript

<script>
// javascript program to swap two variables in single line
 
    let x = 5, y = 10;
    (x ^= y), (y ^= x), (x ^= y);
    document.write("After Swapping values of x and y are ", x + " ",
           y);
  
// This code is contributed by Surbhi Tyagi
</script>

Producción

After Swapping values of x and y are 10 5

Soluciones alternativas: 

  1. Usando swap(): función de biblioteca C++
  2. b = (a + b) – (a = b);
  3. a += b – (b = a);
  4. a = a * b / (b = a)
  5. a = a ^ segundo ^ (b = a)

Complejidad temporal : O(1) 
Espacio auxiliar : O(1)

Este artículo es una contribución de  Harshit Gupta. Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo en write.geeksforgeeks.org . Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *