最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
js把数组产生无序随机数组
时间:2011-11-13 编辑:简简单单 来源:一聚教程网
/**//*
功能:把有序数组打乱(产生无序随机数组)
说明:基本的排序算法大家应该都很清楚。但是在编程中也经常用到相反的操作,即把原来有序的数组元素随机打乱。
以下给出三种方法,第一种是以前我自己写出来的,由于水平差,写出的代码时间复杂度太大,
于是从网上搜索一些简单而且效率高的方法来。
第二种据说是“洗牌算法”,想必很多人都听说过;
第三种是利用JS的内置sort方法,这种实现起来很简单。
*/
代码如下 | 复制代码 |
// 方法1(给大家做失败的教训借鉴) function randArray(num) { var rands = []; var ra = parseInt(num * Math.random()); rands.push(ra); for (var r = 0; r < num - 1; r++) { ra = parseInt(num * Math.random()); for (var m = 0; m < rands.length; m++) { while (rands[m] == ra) { ra = parseInt(num * Math.random()); m = -1; } } rands.push(ra); } //alert(rands); return rands; } |
// 方法2:
//选择两个[0...array.Length)之间的随机数,把它们做下标的两个元素交换位置(这样乱序效率高)
/* 说明:这是“洗牌算法” 有人证明打乱的效果如下:
随机交换nums/2次的效果很差,平均约1/3的对象还在原来的位置
随机交换nums次才基本可用,平均约15%的对象还在原来的位置
随机交换nums*2次才真正可用,平均约2%的对象还在原来的位置
*/
代码如下 | 复制代码 |
function daluan(nums) { var array=[]; for (var i = 0; i < nums; i++) { array[i] = i; } for (var i = 0; i < nums; i++) { var rand = parseInt(nums * Math.random()); var temp = array[i]; array[i] = array[rand]; array[rand] = temp; } return array; } |
// 方法3:
// 让比较函数随机传回-1或1就可以了(这样乱序效率可能不高)
代码如下 | 复制代码 |
var testArray3=[1,2,3,4,5,6,7,8,9,10,22,33,55,77,88,99]; testArray3.sort(function(){return Math.random()>0.5?-1:1;}); alert(testArray3); |
-
上一个: javascript给flash传值代码
-
下一个: javascript 统计、去除重复字符
相关文章
- HTML简单购物数量小程序代码展示 10-31
- html canvas实现弹幕功能 10-31
- HTML中空格表示的意义 10-31
- html area标签解读 10-31
- html使用表单标签实现注册页面代码展示 10-31
- 使用HTML截图并保存为本地图片的代码展示 10-31