JS中数组随机排序实现方法(原地算法sort/shuffle算法)

JS中实现数组随机排序有两种常见方法:原地随机排序算法和使用shuffle算法。

原地随机排序算法

原地随机排序算法(in-place shuffle algorithm)是将数组中元素随机地乱序,同时保持每个元素之间的相对位置不变。算法的时间复杂度是O(n),空间复杂度是O(1),因为所有的操作都是在原数组上进行。

实现步骤

  1. 获取数组长度
  2. 从数组的最后一个元素开始,从前向后遍历数组
  3. 随机生成一个索引值,将该索引值所对应的元素跟当前元素交换位置

这样就可以得到一个经过随机乱序的数组。

代码示例

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),因为新数组占用了额外的空间。

实现步骤

  1. 创建一个新数组,用来存储随机排列后的数据
  2. 遍历原始数组,每次随机生成一个索引值,将该索引值所对应的元素添加到新数组中,并将原始数组中对应的元素删除
  3. 重复步骤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技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • C++中字符串全排列算法及next_permutation原理详解

    C++中字符串全排列算法及next_permutation原理详解 介绍 全排列是指将一组数按一定顺序进行排列,得到所有有可能的组合。例如,对于数字1、2、3,全排列如下: 123132213231312321 C++中有现成的函数next_permutation可以实现全排列,但理解其原理仍然很重要,本篇文章将详细讲解next_permutation的原理…

    算法与数据结构 2023年5月19日
    00
  • PHP数组递归排序实现方法示例

    当我们需要对 PHP 数组进行排序时,通常会使用 sort() 或者 usort() 函数,但这些函数只能对一维数组进行排序。当数组是多维结构时,我们需要使用递归的方式进行实现。 以下是一个 PHP 数组递归排序的示例实现: 定义待排序的数组 $student_scores = [ "class 1" => [ "Pete…

    算法与数据结构 2023年5月19日
    00
  • C++插入排序算法实例详解

    C++插入排序算法实例详解 什么是插入排序算法? 插入排序算法是一种简单直观的排序算法,其基本思想是将待排序的数据插入已排序序列的合适位置,以达到排序的目的。该算法的时间复杂度为 O(N^2),适用于数据量较小的排序场景。 插入排序算法的基本步骤 插入排序算法的基本步骤可以归纳为以下三个: 将待排序序列的第一个元素视作已排序序列,将后面的元素逐个与已排序序列…

    算法与数据结构 2023年5月19日
    00
  • 用C语言实现二分查找算法

    当实现查找某个元素时,一个常见的算法是二分查找(Binary Search),也称作折半查找。二分查找是一种在有序数组中查找某一特定元素的搜索算法,将目标值与数组的中间元素进行比较,如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复以上步骤,直到找到目标值或者确定目标值不存在。 以下是在C语言中实现二分查找的完整…

    算法与数据结构 2023年5月19日
    00
  • JS使用队列对数组排列,基数排序算法示例

    JS使用队列对数组进行排序,可以使用基数排序算法。 基数排序算法是一种非比较排序算法,通过将待排序数据按照位数切割成个、十、百、千等位,然后从低位依次向高位对每个位数进行排序。基数排序算法在排序过程中使用了队列数据结构来保存临时排序结果。 以下是基数排序算法的JavaScript实现: function radixSort(array) { const ma…

    算法与数据结构 2023年5月19日
    00
  • 数组Array的排序sort方法

    下面是关于JavaScript中数组排序sort()方法的详细攻略。 标准语法 array.sort(compareFunction) 参数 compareFunction是可选的,是用来指定按照什么顺序进行排序的,具体取决于具体实现。 如果省略,sort() 方法按照每个字符的 Unicode 代码点进行排序,因此 “10” 在排列时会在 “2” 之前,此…

    算法与数据结构 2023年5月19日
    00
  • JS实现的合并两个有序链表算法示例

    下面为您详细讲解JS实现的合并两个有序链表算法示例的完整攻略。 什么是合并两个有序链表? 合并两个有序链表,顾名思义就是将两个有序链表合并成一个有序链表。具体实现过程是将链表A和链表B按照顺序依次比较,将较小的节点插入到一个新的链表C中,直至A、B中有一个链表被遍历结束,另一个链表中剩余的节点则直接插入到链表C的最后。 示例如下: 链表A 链表B 合并后的链…

    算法与数据结构 2023年5月19日
    00
  • 详解js数组的完全随机排列算法

    详解JS数组的完全随机排列算法 1. 算法原理 完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。 算法的实现原理是: 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j 将位置i上的元素与位置j上的元素交换 经过这样的遍历,整个数组就被完全随机排列了。 2. JS代码实现 …

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部