比较两种数组随机排序方法的效率 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) 修改单位,点击编辑 ...
随机推荐
- 数据标准化方法及其Python代码实现
数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法.标准差法).折线型方法(如三折线法).曲线型方法 ...
- sencha警告:[WARN][Anonymous] [Ext.Loader] Synchronously loading 'Ext.field.Text'
chrome开发者工具下提示: [WARN][Anonymous] [Ext.Loader] Synchronously loading 'Ext.field.Text'; consider addi ...
- coordinatewise 是什么意思?
As far as I remember, in the context of optimization, "coordinate wise" means that you are ...
- Asp.Net程序目录下文件夹或文件操作导致Session失效的解决方案
1.配置web.config <system.web> <sessionState mode="StateServer" stateConnectionStrin ...
- 第08章-使用Spring Web Flow
使用Spring Web Flow Spring Web Flow是Spring MVC的扩展,它支持开发基于流程的应用程序.它将流程的定义与实现流程行为的类和视图分离开来. 1 在Spring中配置 ...
- eclipse启动了tomcat,但是浏览器打不开欢迎页
tomcat在eclipse中启动成功,主页却打不开 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他 ...
- .net IAsyncResult 异步操作
//定义一个委托 public delegate int DoSomething(int count); //BeginInvoke 的回调函数 private static void Execute ...
- 关于MVC刷新页面会两次请求页面的原因
遇到这个奇葩的问题刚开始关注点全放在后台了 ,以为后台哪个地方存在问题,找了半天一无所获之后才开始把问题关注点移到前端,通过不断的注释前台代码, 终于发现了问题,没想到是这个js导致的问题 因为的Vi ...
- [.net 多线程] Interlocked实现CAS操作
Interlocked:为多个线程共享的变量提供原子操作. Interlocked.Increment(ref value) 数值加一(原子性操作) Interlocked.Decrement(ref ...
- markdown syntax
Markdown 语法 转载自https://zh.mweb.im/markdown.html 首先应该了解的 每一个 Markdwon 使用者都应该了解的,是 Markdown 最基本的版本,也就是 ...