js交换变量之重写冒泡排序

本文详细介绍了三种不同的冒泡排序算法实现:传统方法引入临时变量,异或运算无变量交换,以及ES6解构赋值的现代方法。通过具体示例,展示了每种方法的优缺点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.传统冒泡排序写法。(易于理解,引入了变量)

function bubbleSort_1(data) {
  for (let i = 0; i < data.length; i++) {
    for (let j = 0; j < data.length - i - 1; j++) {
      if (data[j] > data[j + 1]) {
        let tem = data[j];
        data[j] = data[j + 1];
        data[j + 1] = tem;
      }
    }
  }
}

2.异或运算(^)在两个二进制位不同时返回1,相同时返回0。(难以理解,未引入变量)
例:

let a = 1; // 二进制表示:01
let b = 3; // 二进制表示:11
a = a ^ b; // 01 ^ 11 (不同时返回1,相同时返回0)  返回二进制 10 即十进制 2  此时a =2
b = b ^ a; // 11 ^ 10 (不同时返回1,相同时返回0)  返回二进制 01 即十进制 1  此时b =1
a = a ^ b; // 10 ^ 01 (不同时返回1,相同时返回0)  返回二进制 11 即十进制 3  此时a =3

此时a和b的值已经交换过来了。连续对两个数a和b进行三次异或运算,a^ =b; b^ =a; a^ =b;,可以互换它们的值。利用此原理可以如下写

function bubbleSort_2(data) {
  for (let i = 0; i < data.length; i++) {
    for (let j = 0; j < data.length - i - 1; j++) {
      if (data[j] > data[j + 1]) {
        data[j] ^= data[j + 1];
        data[j + 1] ^= data[j];
        data[j] ^= data[j + 1];
      }
    }
  }
}

3.ES6变量的解构赋值-交换变量的值。(易于理解,未引入变量)

function bubbleSort_3(data) {
  for (let i = 0; i < data.length; i++) {
    for (let j = 0; j < data.length - i - 1; j++) {
      if (data[j] > data[j + 1]) {
        [data[j], data[j + 1]] = [data[j + 1], data[j]];
      }
    }
  }
}

let arr = [9, 9, 9, 0, 2, 5, 6, 3, 7, 8, 9, 11];
bubbleSort_1(arr);
// bubbleSort_2(arr);
// bubbleSort_3(arr);
console.log(arr); //  [ 0, 2, 3, 5, 6, 7, 8, 9, 9, 9, 9, 11 ]

在不考虑兼容性的前提下第三种是比较好的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaofei0627

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值