不借助第三个变量,进行两个整数的交换

来源:互联网 发布:李嫣兔唇原因知乎 编辑:程序博客网 时间:2024/04/29 14:21

通常情况下,我们要交换两个变量的数值,类似冒泡排序,常用的方式是借助第三个变量,如下:

function bubbleSort(arr) {    for (let i = 0; i < arr.length; i++) {        for (let j = i + 1; j < arr.length; j++) {            if (arr[i] > arr[j]) {                let temp = arr[i]                arr[i] = arr[j]                arr[j] = temp                }            }        }    return arr}

那如何不借助第三个变量 呢?请看下面代码:

function swap(a, b) {    b = a + b    a = b - a    b = b - a    return [a,b]}

上面的代码可以成功将 a, b 的值交换,不信可以试下。
那是怎么做到的呢?

左边是解法 ==> 右边是解释

  • 第一种解法:
b = b - a   ==>  b 相当于 (b - a)a = a + b   ==>  由上可得 a = a + (b - a) 也就是 a = bb = a - b   ==>  由上可得 b = b - (b - a) 也就是 b = a交换成功~

注意以上右边解释所写的 a 和 b 都是初始的 a 和 b


  • 第二种解法:
    与第一种解法一样,都是利用加减法。
b = a + b   ==>  b 相当于 (a + b)a = b - a   ==>  由上可得 a = (a + b) - a 得到 a = bb = b - a   ==>  由上可得 b = (a + b) - b 得到 b = a交换成功~

注意以上右边解释所写的 a 和 b 都是初始的 a 和 b


  • 第三种解法:
    这种解法是使用异或解的,用到的异或的一个重要的知识点就是:
    对于一个数,异或另一个数两次最终得到的还是原来的数
a = a ^ b ==>  a 相当于 a ^ bb = a ^ b ==>  由上可得 b = a ^ b ^ b 得到 b = aa = a ^ b ==>  由上可得 a = a ^ a ^ b 得到 a = b交换成功~

注意以上右边解释所写的 a 和 b 都是初始的 a 和 b

——以下内容更新于2017.8.25——

  • 第四种解法:
    这种解法是采用数组的一种特殊技巧。
let a = 1;let b = 2;a = [b, b = a][0]; ==> a:2,b:1;
  • 第五种解法:
    这种解法是采用了 ECMAScript 2015(ES6) 的解构赋值
let a = 1;let b = 2;[a,b] = [b,a] ==> a:2,b:1;

—–我是分隔线—–
这是我的第一篇博客,也是我用Markdown写的第一篇博客,如果有排版不好的地方请多见谅,如果内容有错请一定在评论区给我指点迷津,在下诚惶诚恐。

原创粉丝点击