首页 热点资讯 义务教育 高等教育 出国留学 考研考公

没有中间变量的javascript冒泡排序

发布网友 发布时间:2022-04-24 05:58

我来回答

2个回答

热心网友 时间:2022-04-22 17:09

// 冒泡排序必须创建一个变量吗? 答案: NO NO NO! 不信请看下方↓↓↓

// 知识重点:连续对 2 个变量使用 3 次异或运算,可以交换两者的值!

let a = 10,
    b = 99;

    a ^= b;
    b ^= a;
    a ^= b;

console.log(a) // 99
console.log(b) // 10

------------------------------------------------------------------------------

示例: 冒泡排序

let numList = [2,6,4,1,9,8,10,7,5,3],
    numListLen = numList.length;

for(let i = 0; i < numListLen; i++){
    for(let j = 0; j < numListLen; j++){
        if(numList[j] > numList[j+1]){
            numList[j] ^= numList[j+1];
            numList[j+1] ^= numList[j];
            numList[j] ^= numList[j+1];
        }
    }
}

console.log(numList); //  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

热心网友 时间:2022-04-22 18:27

在进行位置交换的时候使用以下模式,就可以实现不需要中间变量:
a[i] = a[i] + a[j];
a[j] = a[i] - a[j];
a[i] = a[i] - a[j];

比如a[i]是8,a[j]是9,根据上面步骤有:
a[i] = a[i] + a[j]=8+9=17;
a[j] = a[i] - a[j]=17-9=8;
a[i] = a[i] - a[j]=17-8=9;
因此最终实现了无需中间变量即可交换两者的值。

原本是8和9,交换后则变成了9和8,把这个原理用到冒泡排序交换数据的地方就可以实现你提问需要功能了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com