-1

重複の可能性:
javascript 配列をランダム化するには?

配列からランダム化された二分探索木 (R-BST) を実装して、並べ替えられた配列が O(n lg n) 平均時間を与え、配列が最悪の場合の時間である O(n^2) を与えないようにする必要があります。すでにソートされているか、逆にソートされています。2つのステップは次のとおりです。

  1. 配列 A をランダムに並べ替えます。
  2. BST sort (A) を呼び出します。

最初のステップの 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を使用できます。

4

2 に答える 2

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;
};
于 2012-08-20T08:19:05.177 に答える
-1

シャッフル関数を使用して 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);
于 2012-08-20T08:17:46.987 に答える