核心提示:通常情况下,我们要交换两个数字的顺序,类似冒泡排序,常用的方式是借助第三个变量,如下:function bubbleSort(arr) {for (let i = 0; iarr.length; i+...
通常情况下,我们要交换两个数字的顺序,类似冒泡排序,常用的方式是借助第三个变量,如下:
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 = b b = 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 = b b = b - a ==> 由上可得 b = (a + b) - b 得到 b = a 交换成功~
注意:以上右边解释所写的 a 和 b 都是初始的 a 和 b
第三种解法:
这种解法是使用异或解的,用到的异或的一个重要的知识点就是:
对于一个数,异或另一个数两次最终得到的还是原来的数
a = a ^ b ==> a 相当于 a ^ b b = a ^ b ==> 由上可得 b = a ^ b ^ b 得到 b = a a = a ^ b ==> 由上可得 a = a ^ a ^ b 得到 a = b 交换成功~
注意:以上右边解释所写的 a 和 b 都是初始的 a 和 b
—–我是分隔线—–
这是我的第一篇博客,也是我用Markdown写的第一篇博客,如果有排版不好的地方请多见谅,如果内容有错请一定在评论区给我指点迷津,在下诚惶诚恐。