2011-01-30 5 views
2

です:文字列の配列を与えると、ランダムに並べ替える最も簡単な方法は何ですか?私が思い付いた何

RandomSort() 
{ 
    string[] list = { "Alpha", "Beta", "Gamma", ... } 
    Random rnd = new Random(); 
    string[] list2 = list.OrderBy((x) => rnd.NextDouble()).ToArray(); 
} 

は多分Dictionaryか何かを使用して、他のいくつかの方法がありますか?ありがとう。

+3

[この質問](http://stackoverflow.com/q/108819/128397)の正確な複製、ここで最高の答えは実際には受け入れられた答えではない[この1つ](http://stackoverflow.com/ 110570#110570)は、Fisher-Yates Shuffle(別名Knuth Shuffle実装)のC#コードを持っています。 –

+0

ランダムな並べ替えを検索しましたが、表示されませんでした。リンクありがとう。 – ja72

+1

オンラインポーカーをするためのカードデッキを作る目的でシャッフルしている場合、これは十分にランダムではないことに注意してください。 「ランダム」は擬似ランダムのみです。擬似ランダムシャッフルデッキの小さなサンプルが与えられた場合、他のすべてのカードの順序を予測するのは簡単な練習です。本当に予測できないランダム性が必要な場合は、暗号アルゴリズムのように、より良いランダム性アルゴリズムを使用してください。 –

答えて

6

これは確かに簡単ですが、O(n log(n))です。 Fisher Yatesシャッフルを使用すると、パフォーマンスを向上させることができます。

関連する問題