详解js数组的完全随机排列算法

详解JS数组的完全随机排列算法

1. 算法原理

完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。

算法的实现原理是:

  1. 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j
  2. 将位置i上的元素与位置j上的元素交换

经过这样的遍历,整个数组就被完全随机排列了。

2. JS代码实现

以下是JS代码的实现:

function shuffle(array) {
    var len = array.length;
    for (var i = len - 1; i >= 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

代码中的参数array是需要被随机排列的数组,返回值为排列好的新数组。具体实现中,从后向前遍历数组,每次生成介于[0,i]之间的随机数j,然后将位置i上的元素与位置j上的元素进行交换,这样最终遍历完数组后得到的就是一个完全随机排列的新数组。

3. 示例说明

示例1: 随机排序一组数组

var arr1=[1, 2, 3, 4, 5, 6];
var arr2=shuffle(arr1);
console.log(arr2);

示例1演示了如何将一个数组随机排列,并将排列后的新数组存入另一个数组。

示例2:打乱一组DOM元素的顺序

var domList= document.querySelectorAll('.item');
var shuffledDomList = shuffle(domList);
for (var i = 0; i < shuffledDomList.length; ++i) {
  container.appendChild(shuffledDomList[i]);
}

示例2演示了如何将一个DOM元素列表随机排列,然后按照新的顺序插入到文档中的父容器中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解js数组的完全随机排列算法 - Python技术站

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

相关文章

  • php实现快速排序的三种方法分享

    那么现在我将为您介绍“php实现快速排序的三种方法分享”的完整攻略。 什么是快速排序 快速排序(Quick Sort)通常被认为是对冒泡排序的一种改进。在冒泡排序中,需要进行多次的数据比较和交换操作,而快速排序与其不同之处在于它通过一个基准值将待排序的数组分成两个部分。在计算机领域,快速排序是一种常见的排序算法。 快速排序的常规实现思路 快速排序的常规实现思…

    算法与数据结构 2023年5月19日
    00
  • C/C++浅析邻接表拓扑排序算法的实现

    C/C++浅析邻接表拓扑排序算法的实现 什么是拓扑排序 在图论中,若存在一种拓扑序列,使得对于任意的有向边(u,v),u在序列中都在v的前面,则称该图为拓扑排序,该序列称为拓扑序列。拓扑排序是一个有向无环图(DAG, Directed Acyclic Graph)的一种线性序列。 拓扑排序算法的实现 拓扑排序算法的实现一般基于邻接表,其核心思路为:先将所有入…

    算法与数据结构 2023年5月19日
    00
  • python中的插入排序的简单用法

    下面是Python中插入排序的简单用法攻略: 1. 什么是插入排序 插入排序是一种简单的排序算法,它的基本思想是将未排序的元素依次插入到已排序的有序序列中的合适位置,以此完成排序。插入排序的时间复杂度为O(n^2),通常用于小规模数据的排序。 2. 插入排序的Python实现 以下是插入排序的Python代码实现: def insertion_sort(da…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现经典排序算法之冒泡排序

    JavaScript实现经典排序算法之冒泡排序 什么是冒泡排序? 冒泡排序是一种简单的排序算法,从序列左侧开始比较两个相邻的元素,如果顺序不对就交换位置,直到序列末尾,这样一次遍历后,序列最后一个元素就是当前序列最大值。然后对剩余序列重复上述过程,直到整个序列有序。 算法实现 我们来看看如何用JavaScript实现冒泡排序。 function bubble…

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

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

    算法与数据结构 2023年5月19日
    00
  • c++入门必学库函数sort的基本用法

    一、sort函数的基本介绍 sort()函数是C++ STL标准库提供的一种排序函数,能够对数组或容器进行排序。可以用于排序基本数据类型、结构体、对象等各种数据类型。其中,数组的排序时简单易行的,容器的排序则更加强大方便。 sort()的函数原型如下: template<class RandomAccessIterator> void sort(…

    算法与数据结构 2023年5月19日
    00
  • Java的Arrays.sort()方法排序算法实例分析

    Java的Arrays.sort()方法排序算法实例分析 在Java中,我们可以使用Arrays.sort()方法对数组进行排序。这个方法具有良好的性能和适应性。 然而,不了解其实现原理可能会产生些困惑,我们在这里将从排序算法本身的角度,详细讲述如何使用Arrays.sort()方法并提高其性能。 排序算法 Arrays.sort()方法使用的排序算法是不稳…

    算法与数据结构 2023年5月19日
    00
  • C语言下快速排序(挖坑法)详解

    C语言下快速排序(挖坑法)详解 什么是快速排序 快速排序是将一个待排序的序列分成两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再对这两部分分别进行排序,递归执行该操作直到将整个序列排好为止。快速排序使用了分治思想。由于在每一次的递归过程中,都将待排序的序列分成两部分,因此处理的数据量不断减少,使得算法的效率比较高。 快速排序的实现 挖坑法 挖坑法…

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