怎样得到n个元素的随机排列---摘自夕鳳の舞的博客

上一篇 / 下一篇  2012-07-30 21:18:59 / 个人分类:编程

大家学过排列组合的都知道,n个元素的全排列共有n!(n的阶乘)个。那么给定一个集合,怎样得到一个随机排列呢?这里要求写成 function getRndArray(array1){}的形式,array1是个数组,比如{0,1,2,a,b,c},返回的是元素随机排列后的数组,比如{2,a,c,0,1,b}。每次调用,得到的返回值不同。
<script. language=jscript>
<!--
function getRndArray(arr0){
arr1=new Array();
len=arr0.length;
for(var i=0;i<len;i++){
rnd=Math.floor(Math.random()*arr0.length);
arr1[i]=arr0[rnd];
arr0.splice(rnd,1)
}
return arr1;
}
var array1=new Array();
for(var i=0;i<100;i++){
//为了方便,这里将元素设为了0-99,100个全部是数字,
//而实际这些元素可以是任意字符串或对象,
//所以不要试图从这些元素本身的特点下手
array1[i]=i;
}

var jsBegin = new Date().getTime();
var jstest = 10000;
for(var i=0;i<jstest;i++){
result = getRndArray(array1);
}

var jsEnd = new Date().getTime();
document.write("做完这件事需要" + (jsEnd - jsBegin) + "毫秒<br/>");
-->
</script>

js中几个方法的讲解:

Math.random():得到一个0到1的随机数

Math.floor():返回小于或等于指定数字的最大整数

js中array对象的splice方法的详解:splice()可向数组删除并加入新的元素

arrayObject.splice(index,howmany,element1,.....,elementX)
Parameter
参数
Description
描述
indexRequired. Specify where to add/remove elements. Must be a number
必选项。指定在哪个位置加入/删除元素,必须是数字
howmanyRequired Specify how many elements should be removed. Must be a number, but can be "0"
必选项。指定有多少元素应该被删除。必须是数字,可以是"0"
element1Optional. Specify a new element to add to the array
可选。指定要加入到数组中的新元素
elementXOptional. Several elements can be added
可选。可以加入多个元素

TAG: 随机排列

 

评分:0

我来说两句

Open Toolbar