详解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日

相关文章

  • C语言实现快速排序算法

    C语言实现快速排序算法攻略 什么是快速排序算法 快速排序算法是一种常用的排序算法, 它使用递归的方式不断地将待排序序列分为两个部分,直到每个子序列中只有一个元素,最终合并完成整个序列的排序。 步骤 快速排序算法的步骤如下: 从序列中选取一个基准元素 将所有小于基准元素的元素放到基准元素左边,大于基准元素的元素放到基准元素右边 对基准元素左右两个子序列分别执行…

    算法与数据结构 2023年5月19日
    00
  • 解析左右值无限分类的实现算法

    下面为你详细讲解“解析左右值无限分类的实现算法”的完整攻略: 1. 了解左右值无限分类 左右值无限分类,也称为嵌套集合模型,是一种常见的无限分类方式。在该模型中,每个分类都有一个左值和右值,通过比较左右值大小,可以判断出一个分类是否是另一个分类的子分类或者父分类。支持多层级分类,可以无限嵌套。 2. 左右值无限分类的实现算法 左右值无限分类的实现算法分为两步…

    算法与数据结构 2023年5月19日
    00
  • JS简单数组排序操作示例【sort方法】

    JS简单数组排序操作示例【sort方法】 操作说明 在JavaScript中,通过数组的sort()方法可以对数组进行排序操作。sort()方法会直接对原数组进行排序,返回排序后的原数组。 sort()方法通常需要传入一个比较函数,来指定排序规则。比较函数接收两个参数,分别表示待比较的两个元素,如果返回值小于0,则表示第一个元素排在第二个元素前面;如果返回值…

    算法与数据结构 2023年5月19日
    00
  • MySQL排序原理和案例详析

    MySQL排序的原理主要包括内部排序和外部排序两种方式。内部排序主要用于处理较小的数据集,而外部排序则专门用于处理大型数据集。 在内部排序中,MySQL主要采用快速排序算法进行排序。快速排序是一种常用的分治算法,其核心思想是通过将一个大问题分解成多个小问题并逐步解决,最终将所有小问题关键字的排序结果合并起来得到整个序列的有序排列。 在外部排序中,MySQL采…

    算法与数据结构 2023年5月19日
    00
  • java如何给对象按照字符串属性进行排序

    在 Java 中,我们可以使用 Collections.sort() 方法对任意类型的对象进行排序。但是,如果我们想要按照对象的某一个字符串属性进行排序,我们可以使用 Comparator 接口来实现。 具体步骤如下: 首先,创建一个 Comparator 对象,重写 compare() 方法,按照需要的属性进行排序。例如,如果我们要按照对象的 name 属…

    算法与数据结构 2023年5月19日
    00
  • php实现的常见排序算法汇总

    PHP实现的常见排序算法汇总 本文主要介绍几种PHP实现常见排序算法的方法,帮助读者快速了解和使用这些排序算法。 排序算法是计算机编程领域中非常重要的基础算法之一,可以用于对数据进行排序,常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序等,本文将介绍其中的三种算法。 冒泡排序 冒泡排序是一种简单直观的排序算法,通过比较相邻元素的大小,将较大的元素逐个…

    算法与数据结构 2023年5月19日
    00
  • C语言排序方法(冒泡,选择,插入,归并,快速)

    下面是关于C语言排序方法冒泡、选择、插入、归并、快速的详细攻略: 冒泡排序 冒泡排序是一种最简单的排序算法,它的核心思想是从左到右依次比较相邻的两个元素,如果前一个元素大于后一个元素,就交换它们的位置,这样一遍比较后,最大的元素就会被“冒泡”到最右边。然后再对剩余的元素重复同样的操作,这样一直迭代直到整个序列排序完成。 下面是标准的C语言冒泡排序代码示例: …

    算法与数据结构 2023年5月19日
    00
  • C++ sort排序之降序、升序使用总结

    C++ sort排序之降序、升序使用总结 介绍 sort函数是C++ STL库提供的一种排序函数,可以快速方便地对数组或容器进行排序。本文将详细介绍sort函数的用法,包括排序方式、自定义比较函数和对容器的排序等内容。 基本用法 sort函数的声明如下: template <class RandomAccessIterator> void sor…

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