如何随机排序数组?使用多种方式!递归,迭代,洗牌,sort方法!
方式1: 使用sort 方法 ----
// 方法1 使用sort 方法
var arr = [1,2,3,4,5,6,7,8];
function foo(arr) {
var cloneArr = arr.concat();
cloneArr.sort(function (n1,n2) {
return Math.random() - 0.5 ;
});
return cloneArr;
}
for (var i= 0 ; i < arr.length ; i++ ){
console.log(foo(arr));
}
方式2:使用递归
<script>
var arr = [1,2,3,4,5,6,7,8]; function foo(arr) {
//使用concat 复制一个数组中
var cloneArr = arr.concat();
var result = [];
(function name(params) {
if (!cloneArr.length) return ;
var index = Math.floor(Math.random() * cloneArr.length);
result = result.concat(cloneArr.splice(index, 1));
arguments.callee();
})()
return result;
}
for (let i = 0; i < arr.length; i++) {
console.log(foo(arr))
}
</script>
</html>
方式3:使用迭代
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
function foo(arr) {
//使用concat 复制一个数组中
var cloneArr = arr.concat();
var result = []; var len = cloneArr.length; for(var i= 0 ;i< len ;i++){
var index = Math.floor(Math.random()* cloneArr.length);
result = result.concat(cloneArr.splice(index,1));
}
return result ;
}
for (let i = 0; i < arr.length; i++) {
console.log(foo(arr))
}
方法4: 洗牌方式
var arr = [1, 2, 3, 4, 5, 6, 7, 8];
function foo(arr) {
//使用concat 复制一个数组中
var cloneArr = arr.concat(); for (var i = 0; i < cloneArr.length; i++) {
var index = Math.floor(Math.random() * cloneArr.length);
var temp = cloneArr[index];
cloneArr[index] = cloneArr[i];
cloneArr[i] = temp;
}
return cloneArr;
}
for (let i = 0; i < arr.length; i++) {
console.log(foo(arr))
}
综合四种方法 -----认为用第四钟洗牌方式更佳!
如何随机排序数组?使用多种方式!递归,迭代,洗牌,sort方法!的更多相关文章
- 递归迭代vector三种方法实现二路归并排序
https://mp.csdn.net/mdeditor/84933084# 附链接
- C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...
- 剑指offer——python【第37题】数字在排序数组中出现的次数
题目描述 统计一个数字在排序数组中出现的次数 思路 最贱的方法依旧是count计数.. 当然,,看到有序数组就应该想到二分法,找到重复数字左边和右边的数字,然后两个相减就可以了 解答 方法1 coun ...
- 剑指offer37:统计一个数字在排序数组中出现的次数
1 题目描述 统计一个数字在排序数组中出现的次数. 2 思路和方法 (1)查找有序数组,首先考虑使用二分查找,使时间复杂度为O(log n).更改二分查找的条件,不断缩小区间,直到区间头和区间尾均为k ...
- [大牛翻译系列]Hadoop(13)MapReduce 性能调优:优化洗牌(shuffle)和排序阶段
6.4.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列 ...
- PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌
-自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- java数组随机排序实现代码
例一 代码如下 复制代码 import java.lang.Math;import java.util.Scanner;class AarrayReverse{ public static void ...
- JS数组随机排序
var arr=[1,2,3,4,5]; arr.sort(function(a,b){ var v=Math.random()>0.5?1:-1; console.log(a,b,v); re ...
随机推荐
- Android Q 变更和新特性
安全和隐私变更 隐私保护是Android Q重要的主题之一,Android Q带来了一系列增强用户隐私保护的变更. 1 应用文件存储空间限制 应用访问限制是Android Q影响最大变更之一.在And ...
- [转] 使用Node.js实现简易MVC框架
在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...
- js数据结构与算法--单链表的实现与应用思考
链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...
- Angular 任务列表页
新建一个任务Module $ ng g m task 功能:项目列表显示,增加,修改,删除项目.邀请其它人员加入项目. 单一性原则:希望搭建多个组件,每个组件负责自己的功能. 一.task相关组件 $ ...
- CentOS 7安装OpenCV 3.3.1
1.CentOS具体版本: 2.安装步骤: 1).安装依赖: sudo yum groupinstall "Development Tools" -y sudo yum insta ...
- C - Thief in a Shop - dp完全背包-FFT生成函数
C - Thief in a Shop 思路 :严格的控制好k的这个数量,这就是个裸完全背包问题.(复杂度最极端会到1e9) 他们随意原来随意组合的方案,与他们都减去 最小的 一个 a[ i ] 组合 ...
- input里面的submit鼠标按钮属性cursor
属性cursor 属性值: pointer 小手 move 移动 help 帮助 wait 等待
- java自动化-数据驱动junit演示,下篇
本文旨在帮助读者介绍,如何使用excle实现数据驱动 本文是上文https://www.cnblogs.com/xuezhezlr/p/9096063.html的继续,如果没看上文建议自己看一下,对理 ...
- 英语口语练习系列-C41-食物词汇-鹊桥仙
词汇 1, rice [raɪs] n. 稻:米饭 vt. 把-捣成米糊状 Rice: 米饭 | 大米 | 稻 2, bread [bred] n. 面包:生计 vt. 在-上洒面包屑 Bread: ...
- vue解决加载闪烁问题
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...