我需要从数组中实现随机二叉搜索树(R-BST),以便排序后的数组得到O(n lg n)平均时间而不是O(n ^ 2),这是最坏的情况时间如果数组已经排序或反向排序。现在这两个步骤是:
如何进行第一步JavaScript?我想要它,以便每个n!
排列同样可能发生。我相信在Java中执行此操作的方法是Collections.shuffle
,例如:
Integer[] arr = new Integer[10];
for (int i = 0; i < arr.length; i++) {
arr[i] = i;
}
Collections.shuffle(Arrays.asList(arr));
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
我如何在Javascript中执行此操作?我可以使用jQuery。
答案 0 :(得分:1)
只需将.sort
与随机比较器一起使用:
var comparer = function(a,b) {
return 2 * Math.random() - 1;
}
array.sort( comparer );
编辑由于有些人对解决方案不满意,所以这里有更经典的方法:
Array.prototype.shuffle = function() {
var result = [];
while( this.length ) {
var index = Math.floor( this.length * Math.random() );
result.push( this[ index ] );
this.splice(index, 1);
}
return result;
};
答案 1 :(得分:-1)
您可以使用shuffle函数扩展Array原型:
Array.prototype.shuffle = function() {
var tmp, rand;
for(var i =0; i < this.length; i++){
rand = Math.floor(Math.random() * this.length);
tmp = this[i];
this[i] = this[rand];
this[rand] = tmp;
}
}
然后在任何数组上调用shuffle
来进行就地排序:
var arr = [1,2,3,4];
arr.shuffle();
console.log(arr);