算法问题:怎样得到n个元素的随机排列?
大家学过排列组合的都知道,n个元素的全排列共有n!(n的阶乘)个。那么给定一个集合,怎样得到一个随机排列呢?这里要求写成 function getRndArray(array1){}的形式,array1是个数组,比如{0,1,2,a,b,c},返回的是元素随机排列后的数组,比如{2,a,c,0,1,b}。每次调用,得到的返回值不同。
方法应该很多,关键是效率。大家可以将数组取大一点(这里取为100吧),10000次循环,看看需要多长时间。
<script language=jscript>
<!--
function getRndArray(arr){
//这里写你的函数
}
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>