zoukankan      html  css  js  c++  java
  • 交换两个数的几种方法对比

    (1) 需要第三方变量,开发推荐使用这种

      var m = 10;
      var n = 20;
    
      var temp = m;
      m = n;
      n = temp;
      console.log(m, n) // 20, 10
    

    (2) 不需要第三方变量, 这种有弊端, 有可能会超出数值取值范围,特别是在强类型语言中。

      var m = 100;
      var n = 200;
    
      m = m + n;
      n = m - n;
      m = m - n;
      console.log(m, n) // 200, 100
    

    (3) 不需要第三方变量,使用位运算符 ^ 按位异或

     var m = 100;
     var n = 200;
    
     m = m ^ n;
     n = m ^ n;
     m = m ^ n;
      console.log(m, n)
    

    一个数据对另一个数据位异或两次,该数本身不变,而且与顺序无关,即支持交换律:

      var a = 10
      var b = 5
      console.log(a ^ a ^ b) // 5
      console.log(a ^ b ^ a) // 5
      console.log(b ^ a ^ a) // 5
    
    // 扩展:一个数据对另一个数据位异或偶数次(>=2),该数本身不变
    console.log(b ^ a ^ a ^ a ^ a) // 5
    

    (4) JS数组的解构赋值

    var a = 10;
    var b = 5;
    
    [a, b] = [b, a]
    
    // 解构赋值是一种语法糖,他会被编译为如下代码:
    var _a;
    var a = 10;
    var b = 5;
    
    _a = [b, a], a = _a[0], b = _a[1];
    
  • 相关阅读:
    笔试面试题集锦
    Mosquitto pub/sub服务实现代码浅析-主体框架
    查找算法(一)
    基数排序
    插入排序-----希尔排序
    插入排序------直接插入排序
    归并排序
    选择排序--------简单选择排序
    交换排序------冒泡排序
    排序算法
  • 原文地址:https://www.cnblogs.com/GManba/p/13294226.html
Copyright © 2011-2022 走看看