比较两种数组随机排序方法的效率 JavaScript版
//比较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版的更多相关文章
- Java中8种常见的排序方法
排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...
- 关于JavaScript的数组随机排序
昨天了解了一下Fisher–Yates shuffle费雪耶兹随机置乱算法,现在再来看看下面这个曾经网上常见的一个写法: function shuffle(arr) { arr.sort(functi ...
- js 数组随机排序
仅用于个人学习记录 javascript 数组随机排序1.最简洁的方法:function randomsort(a, b) { return Math.random()>.5 ? -1 : ...
- 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 ...
- C#两种创建快捷方式的方法
C#两种创建快捷方式的方法http://www.cnblogs.com/linmilove/archive/2009/06/10/1500989.html
- HTTP/HTTPS GET&POST两种方式的实现方法
关于GET及POST方式的区别请参照前面文章:http://www.cnblogs.com/hunterCecil/p/5698604.html http://www.cnblogs.com/hunt ...
- java学习之—合并两个数组并排序
/** * 合并两个数组并排序 * Create by Administrator * 2018/6/26 0026 * 下午 4:29 **/ public class MergeApp { pub ...
- iOS - UITableView中有两种重用Cell的方法
UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...
- 两种ps切图方法(图层/切片)
两种Ps切图方法 一. 基础操作: a) Ctrl++ 放大图片,ctrl - -缩小图片 b) 按住空格键space+,点击鼠标左键,拖动图片. c) 修改单位,点击编辑 ...
随机推荐
- js-修改url中某个指定的参数的值
/* * url 目标url * arg 需要替换的参数名称 * arg_val 替换后的参数的值 * return url 参数替换后的url */ function changeURLArg(ur ...
- Linux命令累积
常用命令 ipconfig -查看本机ip.接口等信息 ping ip -ping远程服务器或终端 cd ~ -返回根目录 cd .. 返回上级目录 cd ../.. 返回上两级目录 ...
- css总结16:HTML5 多媒体音频(Audio)视频(video )
1 显示嵌入网页中的 MP3 文件: <embed height="50" width="100" src="horse.mp3"&g ...
- tornado+nginx上传视频文件
[http://arloz.me/tornado/2014/06/27/uploadvideotornado.html] [NGINX REFRER:Nginx upload module] 由于to ...
- HTML5+CSS3从入门到精通 中文pdf版
HTML5+CSS3从入门到精通是通过基础知识+中小实例+综合案例的方式,讲述了用HTML5+ CSS3设计构建网站的必备知识,相对于专业指南.高级程序设计.开发指南同类图书,本书是一本适合快速入手的 ...
- 手机打车APP的机遇与挑战
所谓打车APP,就是个能安装在手机上的打车软件.原理是通过GPS进行定位,能够搜索附近的空车信息然后反馈给用户.同样的,空车信息也会反馈给用户.一般这种啊APP都是跟地图类软件一起的.比如百度地图,谷 ...
- 在普通的"类库"项目中添加 WPF 的 Window 对象
最近开发一个 WPF 项目, 在此项目中有个类库工程, 在开发的过程中发现在类库工程中竟然添加不了 WPF 窗口对象和一些其他的 WPF 对象,在新建窗口中选 WPF 类型,只有一个 “用户控件(WP ...
- angular 子路由
const routes: Routes = [ { path: '', redirectTo: '/home', pathMatch: 'full' }, { path: 'home', compo ...
- Linux日常命令使用记录
scp在跨机器复制的时候为了提高数据的安全性,使用了ssh连接和加密方式,如果机器之间配置了ssh免密码登录,那在使用scp的时候密码都不用输入. 在服务器104.238.161.75上操作,将服务器 ...
- 黑色主题-darkgreentrip
/* 整个页面 */ home,#main { margin:0px 0px 0px 0px; background:rgb(9, 9, 9, 0.9); } /* 头部高度 */ header { ...