首页 > 其他分享 >练习10:打乱一个数组

练习10:打乱一个数组

时间:2022-08-19 16:03:18浏览次数:56  
标签:10 arr shuffle ++ 打乱 length result 数组 Math

这种解法有问题!!

[12,4,16,3].sort(function() {
    return 5 - Math.random();
});

v8 在处理 sort 方法时,使用了插入排序和快排两种方案。当目标数组长度小于10时,使用插入排序;反之,使用快排。

通俗的说,其实我们使用 array.sort 进行乱序,理想的方案或者说纯乱序的方案是:数组中每两个元素都要进行比较,这个比较有 50% 的交换位置概率。如此一来,总共比较次数一定为 n(n-1)。

而不管用什么排序方法,大多数排序算法的时间复杂度介于 O(n) 到 O(n2) 之间,元素之间的比较次数通常情况下要远小于 n(n-1)/2,

Fisher–Yates shuffle 洗牌算法

function shuffle(arr) {
  let l = arr.length, count = 1000000, result = new Array(l).fill(0)
  while(count --) {
    while (l) {
      let i = Math.floor(Math.random() * l--);
      [arr[l],arr[i]] = [arr[i],arr[l]]
    }
    l = arr.length
    // 最后一个元素分别出现a,b,c,d,e的次数
    if (arr[arr.length-1] == 'a') result[0] ++
    if (arr[arr.length-1] == 'b') result[1] ++
    if (arr[arr.length-1] == 'c') result[2] ++
    if (arr[arr.length-1] == 'd') result[3] ++
    if (arr[arr.length-1] == 'e') result[4] ++
  }
  console.log(result)
  return arr
}
console.log(shuffle(['a','b','c','d','e']))

// 结果:
// [ 200179, 200092, 200499, 199400, 199830 ]
// [ 'e', 'a', 'd', 'b', 'c' ]

标签:10,arr,shuffle,++,打乱,length,result,数组,Math
From: https://www.cnblogs.com/xuweikang/p/16602259.html

相关文章

  • 第6章 数组、排序和查找
    ​6.1 为什么需要数组Array     数组可以存放多个同一类型的数据,数组的数据类型是引用类型。6.2 数组的使用     ​​​​​​​1)使用方式1:动......
  • 复现CVE-2022-10270(向日葵远程代码执行漏洞)
    警告请勿使用本文提到的内容违反法律。本文不提供任何担保。漏洞描述    向日葵是一款免费的,集远程控制电脑手机、远程桌面连接、远程开机、远程管理、支持内网......
  • python菜鸟学习: 10. 函数的基本用法
    #-*-coding:utf-8-*-#回参函数deftest01():return0#以元组返回参数deftest02():return1,[1,2,3,4,5],{"name":"liyuzhoupan"}#有参函数deftest......
  • 1021 ObstacleCourse障碍训练课 优先队列+bfs+转弯
    链接:https://ac.nowcoder.com/acm/contest/26077/1021来源:牛客网题目描述考虑一个NxN(1<=N<=100)的有1个个方格组成的正方形牧场。......
  • 桐柏邀请赛 S10 题解
    EnchantedLove记\(S=a_1+a_2+\cdots+a_n\),那么:若\(S\)为偶数,则答案为\(\frac{S}{2}\)。否则,我们找到\(a\)中最小的奇数(显然此时\(a\)中必然有至少一个奇数),设......
  • Win10桌面图标显示问题
    原文链接Windows桌面图标出现模糊、阴影等显示问题。解决办法1.在桌面上鼠标右键→个性化→主题→桌面图标设置→把计算机回收站用户的文件控制面板网络等全部不选......
  • Win10系统持续集成
    使用工具:jdk+jmeter+Ant+jenkinsjdk-1.8.0_241版本【安装参考链接:https://blog.51cto.com/u_15463439/5226803】jenkins-2.346.3版本【安装参考链接:https://www.jianshu.......
  • 10个常用的损失函数解释以及Python代码实现
    什么是损失函数?损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越......
  • 数组常见操作
    8.19day7数组常见操作获取数组最值public static int maxElement(int[]arr){//假设第一个元素的值就是最大值int max =arr[0];//遍历数组元素,依次和......
  • php对很大的二维数组做去重和求差集操作:array_filter太慢,array_map配合array_diff速度
    需求:长度大约10万级别的二维数组,元素内数组长度10个左右(其实就是一个数据表的结果集合),根据指定字段对数据进行去重,最后要得到去重后被丢弃的数据明细。 两个关键过程:......