需求: 输入a b 输出 b a
常规交换
/*
*临时交换
*优点:没有缺陷
*缺点:需要临时变量
*/
function tpSwap(a, b){
let tmp = a;
a = b;
b = tmp;
}
加减交换
/*
*算术交换
*优点:不需要借助临时变量
*缺点:a+b不能溢出
*/
function asSwap(a, b){
a = a + b; // a = a + b
b = a - b; // b = a + b - b => a
a = a - b; // a = a + b - a => b
}
异或交换
/*
*异或交换
*优点:不需要借助临时变量
*缺点:交互双方不能相等
*/
function eoSwap(arr, a, b){
a = a ^ b; // a = a ^ b
b = a ^ b; // b = (a ^ b) ^ b => a
a = a ^ b; // a = (a ^ b) ^ a => b
}