JS中实现数组随机排序有两种常见方法:原地随机排序算法和使用shuffle算法。
原地随机排序算法
原地随机排序算法(in-place shuffle algorithm)是将数组中元素随机地乱序,同时保持每个元素之间的相对位置不变。算法的时间复杂度是O(n),空间复杂度是O(1),因为所有的操作都是在原数组上进行。
实现步骤
- 获取数组长度
- 从数组的最后一个元素开始,从前向后遍历数组
- 随机生成一个索引值,将该索引值所对应的元素跟当前元素交换位置
这样就可以得到一个经过随机乱序的数组。
代码示例
function shuffle(arr) {
let len = arr.length;
for (let i = len - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[arr[i], arr[j]] = [arr[j], arr[i]];
}
return arr;
}
let arr = [1, 2, 3, 4, 5];
shuffle(arr);
console.log(arr);
Shuffle算法
Shuffle算法也是一种随机排序算法,它的原理是将数组中的每个元素随机地分配到一个新数组中。该算法的时间复杂度是O(n),空间复杂度是O(n),因为新数组占用了额外的空间。
实现步骤
- 创建一个新数组,用来存储随机排列后的数据
- 遍历原始数组,每次随机生成一个索引值,将该索引值所对应的元素添加到新数组中,并将原始数组中对应的元素删除
- 重复步骤2,直到原始数组为空
代码示例
function shuffle(arr) {
let result = [];
while (arr.length > 0) {
let randomIndex = Math.floor(Math.random() * arr.length);
result.push(arr[randomIndex]);
arr.splice(randomIndex, 1);
}
return result;
}
let arr = [1, 2, 3, 4, 5];
shuffle(arr);
console.log(arr);
以上就是JS中数组随机排序的完整攻略,希望能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中数组随机排序实现方法(原地算法sort/shuffle算法) - Python技术站