数组内部值随机化的Javascript方法及随机数组生成方法

本文介绍了一种数组内部值索引的随机化方法和用Javascript创建随机数组的方法,供大家参考:

在今天的量子通讯组,我看到一些学生讨论随机数组的问题。这个算法非常好,这使我想起了以前我没有意识到的方法。

对于这个数组问题(然后排序一个值数组,返回一个新数组),我以前的实现方法是:


功能randarr(ARR){
var = { },
obj = { },
我= arr.length,
L = i,
n;
当(- = 0){
n = math.floor(Math.random)*(L);
如果(obj { }无效= 0){
RET { ret.length } = obj { } = { } ARR;
{人}
++;
}
}
返回页首;
}


上面的代码将工作,但它不是一个好的算法,它打算执行原数组长度的周期,每个周期将随机选择一个原始的数组索引,然后确定指标是否已经采取,如果没有索引值产生一个新的数组,如果要我加1递减键(重复循环直到再下指标),这种方法的性能是非常人性的,并认为谁看到这个想法的学生已经了解了。

现在我们给小组中的同学给出算法:


功能randarr(ARR){
var = { },
我= arr.length,
n;
(0)arr.slice ARR =;
当(- = 0){
n = math.floor(Math.random)*(我);
RET ret.length } = { arr.splice(n,1){ 0 };
}
返回页首;
}


这是一个非常聪明的算法,采取随机指标在每个周期中,并设置其值删除数组中,所以,如果指数继续随机存取,该指数已不再是一个时间的价值,和随机数的范围将根据阵列的减少长度的减小,这样你就可以获得一定数量的一次性循环的理想结果。

我看到的是一个改进版,是一个从数组中删除由JK大洗牌算法的使用而引起的操作性能问题,即每一个缺失的位置替换操作(当前值和递减键我对应于交换价值的指标),对整个阵列的影响是最小的,或者把它的代码:


功能randarr(ARR){
var = { },
我= arr.length,
n;
(0)arr.slice ARR =;

当(- = 0){
n = math.floor(Math.random)*(我);
RET { } = ret.length ARR { };
ARR {N} = ARR {我};
}
返回页首;
}




最后,我们给出了一个创建随机数组的方法:


功能makerandarr(min,max){
var = { },
obj = { },
n;
为((最大=最小;最大)){
n = math.ceil(Math.random()*(最大值-最小))+ min;
RET { ret.length } = obj { } n | |;
obj { } = obj {max}马克斯| |;
}
返回页首;
}




希望本文能对大家的javascript程序设计有所帮助。