[JavaScript] 使用 Fisher-Yates 随机算法,随机化数组

简介: 要使用 JavaScript 随机化数组的顺序,可以使用 Fisher-Yates 随机算法(也称为 Knuth 洗牌算法)。这个算法通过遍历数组,将当前元素与随机位置的元素交换来实现随机化。

要使用 JavaScript 随机化数组的顺序,可以使用 Fisher-Yates 随机算法(也称为 Knuth 洗牌算法)。这个算法通过遍历数组,将当前元素与随机位置的元素交换来实现随机化。

下面是一个使用 Fisher-Yates 算法随机化数组的示例:

function shuffleArray(array) {
   
  for (let i = array.length - 1; i > 0; i--) {
   
    // 生成一个 0 到 i 之间的随机索引
    const j = Math.floor(Math.random() * (i + 1));

    // 交换当前元素与随机位置的元素
    [array[i], array[j]] = [array[j], array[i]];
  }

  return array;
}

// 示例用法
const myArray = [1, 2, 3, 4, 5];
const shuffledArray = shuffleArray(myArray);
console.log(shuffledArray);

在这个示例中,我们定义了一个 shuffleArray 函数,接受一个数组作为参数。然后,我们使用循环来遍历数组,从最后一个元素开始,生成一个随机索引(介于 0 到当前索引之间)。然后,我们交换当前元素和随机索引处的元素,进行随机化。

最后,我们调用 shuffleArray 函数,并将数组作为参数传入。它会返回一个随机化顺序的数组。我们使用 console.log 打印出结果以进行验证。

请注意,shuffleArray 函数会直接在原始数组上进行修改,并返回随机化后的数组。如果你不想修改原始数组,可以在函数内部创建一个副本进行操作。

相关文章
|
3月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
48 0
|
3天前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
17 7
|
1天前
|
存储 监控 JavaScript
深度探秘:运用 Node.js 哈希表算法剖析员工工作时间玩游戏现象
在现代企业运营中,确保员工工作时间高效专注至关重要。为应对员工工作时间玩游戏的问题,本文聚焦Node.js环境下的哈希表算法,展示其如何通过快速查找和高效记录员工游戏行为,帮助企业精准监测与分析,遏制此类现象。哈希表以IP地址等为键,存储游戏网址、时长等信息,结合冲突处理与动态更新机制,确保数据完整性和时效性,助力企业管理层优化工作效率。
16 3
|
3月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
54 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
3月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
46 2
|
3月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
43 3
|
3月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
56 4
|
3月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
52 1
|
3月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
33 5
|
3月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
31 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列