//比较2中数组随机排序方法的效率 JavaScript版

//randon1思路
//当len=5时候,从0-5中随机3一个放入i=0,
// 从0-3随机一个2放入i=2
// 从0-2随机一个1放入i=4
// 从0-1随机一个0放入i=1
// 从4-5随机一个5放入i=3 //当len=10时候,从0-10中随机8一个放入i=0,
// 从0-8随机一个5放入i=3
// 从0-5随机一个1放入i=6
// 从0-1随机一个0放入i=9
// 从2-5随机一个4放入i=1
// 从2-4随机一个3放入i=4
// 从2-3随机一个2放入i=7
// 从4-5随机一个5放入i=2
// 从8-10随机一个9放入i=5
// 从8-9随机一个8放入i=8 //randon2思路
//只是每次把数组有效位置的最后一个元素移动到当前位置就可以了,这样算法的复杂度就降低为 O(n) ,速度大大提高。 //这种效率低 合适生成有一定规律的随机排序
function random1(l,r){
var arr=[]
var len=r-l
var n=0;
var _sync=function(l,r){
if(r>l){
var mid=0|Math.random()*(r-l)+l if(n>=len){
n=1
}
arr[n]=mid
n=n+2; _sync(l,mid)
_sync(mid+1,r)
}
}
_sync(l,r)
return arr }
//这种效率高 完全打乱的随机排序
function random2(l,r){
var arr=[]
var ourArr=[]
var len=r-l
//初始生成
for(var i=0;i<len;i++){
arr[i]=i
} var end = len - 1; for (var n = 0; n < len; n++)
{
var num = 0|Math.random()*(end + 1);
ourArr[n] = arr[num];
arr[num] = arr[end];
end--;
}
return ourArr
}
//执行效率
var cur1=new Date().getTime()
var arr1=random1(10,5000000)
var cur2=new Date().getTime()
var arr2=random2(10,5000000) var cur3=new Date().getTime()
console.log(cur2-cur1);//654
console.log(cur3-cur2);//341
//相差接近2倍
//console.log(arr1)
//console.log(arr2)

  

比较两种数组随机排序方法的效率 JavaScript版的更多相关文章

  1. Java中8种常见的排序方法

    排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...

  2. 关于JavaScript的数组随机排序

    昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...

  3. js 数组随机排序

    仅用于个人学习记录 javascript 数组随机排序1.最简洁的方法:function randomsort(a, b) {    return Math.random()>.5 ? -1 : ...

  4. 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 ...

  5. C#两种创建快捷方式的方法

    C#两种创建快捷方式的方法http://www.cnblogs.com/linmilove/archive/2009/06/10/1500989.html

  6. HTTP/HTTPS GET&POST两种方式的实现方法

    关于GET及POST方式的区别请参照前面文章:http://www.cnblogs.com/hunterCecil/p/5698604.html http://www.cnblogs.com/hunt ...

  7. java学习之—合并两个数组并排序

    /** * 合并两个数组并排序 * Create by Administrator * 2018/6/26 0026 * 下午 4:29 **/ public class MergeApp { pub ...

  8. iOS - UITableView中有两种重用Cell的方法

    UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...

  9. 两种ps切图方法(图层/切片)

    两种Ps切图方法 一.      基础操作: a)    Ctrl++ 放大图片,ctrl - -缩小图片 b)    按住空格键space+,点击鼠标左键,拖动图片. c)    修改单位,点击编辑 ...

随机推荐

  1. .net对Cookie的简单操作

    1 声明:HttpCookie MyCookie= new HttpCookie("test"); 2增加:MyCookie.Values.Add("key1" ...

  2. Django框架 之 Pagination分页实现

    Django框架 之 Pagination分页实现 浏览目录 自定义分页 Django内置分页 一.自定义分页 1.基础版自定义分页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. 不错的silverlight教程

    http://www.visifire.com/documentation/Visifire_Documentation/Charts/Reference/Chart_Elements_Referen ...

  4. 国外物联网平台(6):Electric Imp

    国外物联网平台(6)——Electric Imp 马智 公司背景 Electric Imp成立于2011年,公司设立在美国加利福尼亚州洛斯阿尔托斯和英国剑桥 公司投资者包括:富士康技术集团.PTI创投 ...

  5. 关于MVC刷新页面会两次请求页面的原因

    遇到这个奇葩的问题刚开始关注点全放在后台了 ,以为后台哪个地方存在问题,找了半天一无所获之后才开始把问题关注点移到前端,通过不断的注释前台代码, 终于发现了问题,没想到是这个js导致的问题 因为的Vi ...

  6. U盘安装Ubuntu 12.04成功后系统无法启动的原因及解决办法

    想搭建一个Linux开发环境,选择了ubuntu12.04长期支持版,采用u盘安装(Universal-USB-Installer做的启动),发现安装完成之后,拔掉u盘无法启动,插上u盘之后,可以重启 ...

  7. Duration Assertion(持续时间)

    Duration Assertion用来测试每一个响应的时间是否小于给定的值,任何超过给定毫秒数的响应都会标记为失败. Duration in milliseconds:响应的持续时间是否在给定的值范 ...

  8. SDUT OJ 数据结构实验之二叉树六:哈夫曼编码

    数据结构实验之二叉树六:哈夫曼编码 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  9. BI中的报表业务功能授权使用"自定义主题"

  10. SQL中删除重复的行(重复数据),只保留一行 转

    方法一:使用在T-SQL的编程中 分配一个列号码,以COL1,COL2组合来分区排序,删除DATABASE重复的行(重复数据),只保留一行 // COL1,COL2是数据库DATABASE的栏位 de ...