4) 从头遍历,每次从后面的牌中选一个与前面的交换(并不能完全随机) 将数组var arr = [0,1,2,3,4,5,6], 顺序打乱 5) 新建一个临时数组,从原数组中随机抽取,存入新数组(可以完全随机) 将数组var arr = [0,1,2,3,4,5,6], 顺序打乱 6) 调用 数组 的 sort 方法, 时间复杂度较高 将数组var arr = [0,1,2,3,4,5,6], 顺序打乱
时间: 2023-09-20 12:03:04 浏览: 73
好的,下面是分别实现题目中的三种打乱数组的方法:
1. 交换法:
```javascript
function shuffle1(arr) {
for (let i = 0; i < arr.length; i++) {
const j = Math.floor(Math.random() * (arr.length - i) + i);
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
const arr = [0, 1, 2, 3, 4, 5, 6];
console.log(shuffle1(arr)); // [2, 3, 5, 4, 0, 6, 1]
```
2. 抽取法:
```javascript
function shuffle2(arr) {
const result = [];
while (arr.length) {
const index = Math.floor(Math.random() * arr.length);
result.push(arr.splice(index, 1)[0]);
}
return result;
}
const arr = [0, 1, 2, 3, 4, 5, 6];
console.log(shuffle2(arr)); // [3, 6, 1, 5, 2, 0, 4]
```
3. sort 方法:
```javascript
function shuffle3(arr) {
return arr.sort(() => Math.random() - 0.5);
}
const arr = [0, 1, 2, 3, 4, 5, 6];
console.log(shuffle3(arr)); // [4, 0, 3, 6, 2, 5, 1]
```
需要注意的是,第三种方法的时间复杂度较高,在大规模数据处理时,不建议使用。而前两种方法的时间复杂度都为 O(n),效率比较高。
阅读全文