[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 函数会直接在原始数组上进行修改,并返回随机化后的数组。如果你不想修改原始数组,可以在函数内部创建一个副本进行操作。

相关文章
|
1月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
37 0
|
28天前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
26 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
22天前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
17 2
|
25天前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
19 3
|
27天前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
34 4
|
25天前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
27 1
|
29天前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
22 5
|
28天前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
20 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
1月前
|
JavaScript 前端开发 索引
探索JavaScript数组:基础
探索JavaScript数组:基础
17 3
|
1月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
30 1