首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js打乱数组内元素顺序(Fisher–Yates shuffle洗牌算法)

如何将数组内元素顺序打乱呢?这里小shy向大家介绍一种算法。 Fisher–Yates shuffle:洗牌算法。...通俗理解: 先将数组最后一位元素作为参考点,将这个参考点和数组其他位置元素(使用随机数获得)交换位置(当然也有不改变其位置情况); 然后将数组倒数第二位元素作为参考点,将这个参考点和数组其他位置元素...(使用随机数获得)交换位置(当然也有不改变其位置情况); 然后将数组倒数第三位元素作为参考点,将这个参考点和数组其他位置元素(使用随机数获得)交换位置(当然也有不改变其位置情况); 以此类推,直到参考点为数组第一位元素交换完毕之后结束...最终得出一个打乱顺序数组。 应用场景:随机展示图片、随机音乐播放等等。...point = len - 1; point >= 0; point--) { index = Math.floor(Math.random() * point); // 交换两个元素

1.5K20

打乱数组顺序三种方法

sort排序法(最简单打乱数组顺序方法) 原理: 利用sort用法:arr.sort(compareFunction) 如果 compareFunction(a,b) 返回值大于 0 ,则...,才发现原来此种方法缺陷,误导了大家,对不起!下边是《常用sort打乱数组方法真的有用?》文章中提供一种正确sort打乱数组用法。...0, 10, 2, 12, 4, 8, 14] //[12, 11, 3, 16, 1, 2, 7, 10, 9, 14, 6, 5, 4, 8, 15, 0, 13] 循环随机位交换法(最容易理解打乱数组顺序方法...2, 9, 3, 8, 11, 15, 0, 7] //[2, 9, 10, 13, 12, 15, 16, 8, 1, 11, 14, 0, 3, 5, 4, 7, 6] 循环随机位法(循环次数最多打乱数组顺序方法...) 原理: 创建一个新数组保存打乱变量; 每次循环产生一个随机位,将随机位数保存至新数组中; 查询新数组中是否存在随机位数,如果不存在,就保存,如果存在就重新循环该次循环。

2.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

【说站】java随机打乱数组顺序

java随机打乱数组顺序 本教程操作环境:windows7系统、java10版,DELL G3电脑。...1、过程 (1)数组大小和要重排序数组;    (2)初始化数组,以下标为元素值; (3)顺序打印出数组值,重排序; (4)从0到index处之间随机取一个值,跟index处元素交换,进行位置调整...       private static final int SIZE = 10;       //要重排序数组       private int[] positions = new int[SIZE...,以下标为元素值               positions[index] = index;           }           //顺序打印出数组值           printPositions...        positions[p1] = positions[p2];           positions[p2] = temp;  //更好位置     }              //打印数组

1.5K30

js关键词变色,数组打乱数组去重实现和封装

1.前言 今天,把自己之前封装过一部分小功能操作分享出现,都是一些可以说是比较常用,实现起来比较简单,代码又比较少一些功能或操作,比如关键词变色,数组打乱数组去重等。...2.打乱数组 打乱数组这个,也是比较常用吧,上代码 function upsetOrder(arrOld,num){ var result=[],_length=num||arrOld.length...这里值得注意一点,arr=Object.assign([],arrOld)这行代码就是为了,打乱结果不影响原来数组。比如传进来时[1,2,3],执行了原来数组还是[1,2,3]。...只是产生了一个新打乱数组而已。 3.数组去重 数组去重,相信大家遇到就多了,无论是面试题还是项目需要,多少都会遇到过。去重方法很多,我主要说两种方法。...后续 关于js是实用或者常用小功能操作,今天先到这里,以后再写其它,希望能帮到大家!

1.4K21

384 打乱数组

返回 [1, 2, 3] solution.shuffle(); // 随机返回数组 [1, 2, 3] 打乱结果。...既然有重置的话打乱修改不是在原数组上进行。第一是新数组第二是随机位置。 ?...总结 这一题主要需要考虑打乱是一个什么状态,操作逻辑有没有影响到“随机”,关于解法一与二采用了两种方式记录原数组打乱过程数组,由于解法一打乱赋值过程分了两个容器list和result所以才可以简略这样写一个空数组...解法二为了减少生成list所带来n倍复杂度,采用交换,这样就需要在打乱数组本身原地进行,如果是在原数组取一对赋值到打乱数组那么就会出现重复。...还有一个点是重置方法,我在解法一直接是返回原数组只能说在当前逻辑上是满足,但最好还是像解法二一样真正打乱数组进行还原而不是把原数组返回出去。

78840

常用sort打乱数组方法真的有用?

() => Math.random() - 0.5); } 我也曾经经常使用这种写法,不久前才意识到,这种写法是有问题,它并不能真正地随机打乱数组。...arr.sort(() => Math.random() - 0.5); count[arr.indexOf('a')]++; } console.log(count); 在 Node.JS...另外,需要注意是上面的分布仅适用于数组长度不超过 10 情况,如果数组更长,比如长度为 11,则会是另一种分布。...分布不同原因是 v8 引擎中针对短数组和长数组使用了不同排序方法(下面会讲)。可以看到,两种算法结果虽然不同,但都明显不够均匀。...翻看v8引擎数组部分源码,注意到它出于对性能考虑,对短数组使用是插入排序,对长数组则使用了快速排序,至此,也就能理解为什么() => Math.random() - 0.5并不能真正随机打乱数组排序了

1.4K60

JS执行顺序

javascript给人直观感受是,从上往下执行,但实际上却不是这样,先看个例子 1. console.log(test); 2. var test = "你好"; 3. console.log(...因为javascript执行时,在同一个作用域内是先编译再执行 编译时候会编译 function 和 var 这两个关键词定义变量,编译完成后从上往下执行并向变量赋值 所以执行第1行时, var test...已经执行过了,所以test不会报错,而test2就会报错 需要注意是,对 var test 执行编译时,只是先定义了 test 这个变量,并不会把 "你好" 这个值赋给test,而是到第2行时才给test...赋值,这就是为什么第1行执行结果是 undefined 对于上面的例子,可以这样理解 //先编译 var 定义变量 1. var test; //编译完成后,从上到下执行代码 2. console.log...(test); 3. test = "你好"; 4. console.log(test); 5. console.log(test2); 再看一下function编译执行过程 例子 test();

9.2K60

微信小程序(游戏)----拖拽拼图(图片分块和打乱顺序

效果图 图片分块 创建二维数组 typeArr 和一维有序数组 pointsArr; 计算每个块区view定位坐标(x,y)和view背景坐标(px,py)、以及每个view顺序 count; 填充数组...}); this.pointsArr.push(count); count++; } } this.typeArr = arr; } 数组顺序打乱...通过循环数组 pointsArr ,每次循环产生一个数组长度内数,将当前位置数和随机数位置数进行交换(打乱数组 pointsArr); 创建打乱坐标数组 newTypeArr,数组 newTypeArr...view坐标不变,只是改变背景坐标,从而形成图片打乱顺序。...2、打乱顺序只是打乱背景图片顺序,而不是每个view顺序,记住view始终没有发生位置变化。

1.3K20

PHP内部实现打乱字符串顺序函数str_shuffle方法

前言 春节已过,今天是上班第一天,还得翻一翻之前没有看完PHP源码。 今天聊是字符串顺序打乱函数str_shuffle。这个函数本身使用频率并不高。但是,其内部实现还是非常有趣。...str_shuffle() 函数随机地打乱字符串中所有字符。...要注意,打乱是字符串中“字符” 一个字母等于一个字符 一个汉字等于2个字符 自己实现 如果在没有看PHP源码内部实现之前,如果使用php实现内部字符串打乱顺序操作,我能想到是下面几种方式。...循环随机数 使用随机数,可以有随机取字符串字符拼接,或者顺序取出,放到随机数自定位置。这两种方式都涉及到随机数重复情况,需要去重。 ? 这种方式重点在于生成不重复随机数。...切分成数组然后打乱顺序 ? 用数组打乱顺序方式实现其实是有些“作弊”嫌疑。 PHP内部实现 来看看PHP内部如何实现。 ?

88220

PHP内部如何实现打乱字符串顺序函数str_shuffle

2019年春节已过,今天是上班第一天,还得翻一翻之前没有看完PHP源码。 今天聊是字符串顺序打乱函数str_shuffle。这个函数本身使用频率并不高。但是,其内部实现还是非常有趣。...自己实现 如果在没有看PHP源码内部实现之前,如果使用php实现内部字符串打乱顺序操作,我能想到是下面几种方式。...循环随机数 使用随机数,可以有随机取字符串字符拼接,或者顺序取出,放到随机数自定位置。这两种方式都涉及到随机数重复情况,需要去重。 ? 这种方式重点在于生成不重复随机数。...切分成数组然后打乱顺序 ? 用数组打乱顺序方式实现其实是有些“作弊”嫌疑。 PHP内部实现 来看看PHP内部如何实现。 ?...两个方法出发点都一样,但是稍微不一样就可以带来很大提升。

1K30
领券