演算法基礎 --- 從swap開始

帕尼尼0_0發表於2018-09-13

需求: 輸入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
 }

相關文章