发布网友 发布时间: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,把这个原理用到冒泡排序交换数据的地方就可以实现你提问需要功能了。