var a=[0,1,2,3,4,5,6,7,8,9, 10, 11]; function complex(array){ var arr = []; var len = array.length; for(var i = 0; i < len; i++){ //执行10次pop操作, arr.push(array_pop(array)); } document.write(arr.toString() + "<br />"); };
function array_pop(_array){ //根据索引值与栈尾交换 var _len = _array.length; var _index = parseInt(Math.random() * _len) % _len; //随机的索引 0 - 9
var _temp = _array[_index]; _array[_index] = _array[_len-1]; _array[_len-1] = _temp;
return _array.pop(); }
for(var c = 0; c< 20; c++){ complex(a); a = [0,1,2,3,4,5,6,7,8,9, 10, 11]; }用pop()与push()其实2L的不错, 应该设定交换次数
<script type="text/javascript"> var testArray=[1,2,3,4,5,6,7,8,9,10,22,33,55,77,88,99]; testArray.sort(function(){return Math.random()>0.5?-1:1;}); alert(testArray); </script>这是最简单的方法数组的sort方法,请查手册 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:•若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 •若 a 等于 b,则返回 0。 •若 a 大于 b,则返回一个大于 0 的值。
Array.prototype.random = function ($lim) { var t = this.concat(); var l = t.length; var e = ($lim && $lim < (l-1)) ? ($lim+1) : l; while (--e) { var r = (Math.random() * l--) | 0; t[r] = t[l] | (t[l] = t[r]) & 0; } return t.slice(-$lim); } 前面那个很简单,这个更高效。都是人家写的,呵呵。
var a=[0,1,2,3,4,5,6,7,8,9];
for(i=0; i<a.length; ++i){
j = parseInt(a.length*Math.random());
k = a[i];
a[i] = a[j];
a[j] = k;
}
document.write(a);
var a=[0,1,2,3,4,5,6,7,8,9];
function changePosition(size,arr) {
for(index=size-1; index>=0; index--) {
//从0到index处之间随机取一个值,跟index处的元素交换
exchange(parseInt(Math.random()*size), index,arr);
}
}
function exchange(p1, p2,arr){
temp = arr[p1];
arr[p1] = arr[p2];
arr[p2] = temp;
}
changePosition(a.length,a);
alert(a);
头回见到这种需求,照ls的试试
用reverse反转下,行不
var a=[0,1,2,3,4,5,6,7,8,9, 10, 11];
function complex(array){
var arr = [];
var len = array.length;
for(var i = 0; i < len; i++){
//执行10次pop操作,
arr.push(array_pop(array));
}
document.write(arr.toString() + "<br />");
};
function array_pop(_array){
//根据索引值与栈尾交换
var _len = _array.length;
var _index = parseInt(Math.random() * _len) % _len; //随机的索引 0 - 9
var _temp = _array[_index];
_array[_index] = _array[_len-1];
_array[_len-1] = _temp;
return _array.pop();
}
for(var c = 0; c< 20; c++){
complex(a);
a = [0,1,2,3,4,5,6,7,8,9, 10, 11];
}用pop()与push()其实2L的不错, 应该设定交换次数
给你找了篇文章,希望对你有帮助
<script type="text/javascript">
var testArray=[1,2,3,4,5,6,7,8,9,10,22,33,55,77,88,99];
testArray.sort(function(){return Math.random()>0.5?-1:1;});
alert(testArray);
</script>这是最简单的方法数组的sort方法,请查手册
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:•若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
•若 a 等于 b,则返回 0。
•若 a 大于 b,则返回一个大于 0 的值。
{
var t = this.concat();
var l = t.length;
var e = ($lim && $lim < (l-1)) ? ($lim+1) : l; while (--e)
{
var r = (Math.random() * l--) | 0;
t[r] = t[l] | (t[l] = t[r]) & 0;
}
return t.slice(-$lim);
}
前面那个很简单,这个更高效。都是人家写的,呵呵。