
0から99までの数字をランダムに並び替えて、
89 42 19 35 2 94 12 ....
のような数字の列を得たいのですが、どうすればよいでしょうか?一見、簡単そうなのですが、つまずいています。
最初思いついたのは次の方法です。
以下を i=0 から i=99になるまで繰り返す。
(1) tmp = (int) 100 * Math.random(); と 0~99の乱数を発生させる
(2) a[0]~a[i-1]の中にxと同じ値が無ければ a[i] = x;と代入。同じものがあったら (1)に戻る。
(3) i = i+1;
この方法だと、i=98の時は、ほとんどの場合「a[0]~a[i-1]の中にxと同じ値がある」ことになってしまい、iが増えるごとにスピードが落ちます。
100個くらいの数字なら良いのですが、100000000個の数字だと非効率な気がします。
みなさんどうなさっているのでしょうか?
No.1ベストアンサー
- 回答日時:
0~99までの数列を配列に作り、それをシャッフルすればよいのでは?
まあ完全なシャッフルというのも難しいっちゃ難しいんですが。
参考URL:http://ray.sakura.ne.jp/tips/shaffle.html,http:/ …
No.4
- 回答日時:
質問者の方法では条件分岐が処理を遅くしていると考えられます。
条件分岐を無くして次のようなアルゴリズムを採用してはどうでしょう。
n回目の処理で配列の先頭からn番目を、先頭から乱数の示すm番目の要素と入れ替える。
1回目乱数2 12345→21345
2回目乱数5 21345→25341
3回目乱数3 25341→25341
4回目乱数2 25341→24351
5回目乱数1 24351→14352
この場合、一度スワップされた数値を再度スワップする事がありますが気にしてはいけません。
No.3
- 回答日時:
乱数を発生させるやり方でも、質問内容の方法だと
仰るとおり、スピードは遅くなるのは確実です。
0 から99までの配列をつくり、
0 から99までの乱数を2つ発生させて入れ替える。
これを適当な回数繰り返せば、ランダムな並びになります。
つまりトランプのシャッフルの要領です。
同じ乱数を使うならば、こちらの方が効率が良いかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelで、行に複数の数字が入力されているセルが複数の列存在し、行を跨いでセル内の数値を並び替える 5 2022/06/17 18:03
- 数学 円周率について。 3 2023/01/26 15:10
- Java Java 南京錠 2 2023/02/04 11:46
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) SUMIF関数について 4 2023/06/14 13:13
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列について
-
【C#】ハッシュテーブル(連想...
-
Javaで文字と数字が混ざったも...
-
ArrayListからBean配列に値をセ...
-
『args[]』とは?
-
セッションを使ったint型の値の...
-
C#で16進バイナリ文字列連結
-
配列数を超えてアクセスしたと...
-
この警告はどうすれば?
-
JavaBeansの配列の値取得方法に...
-
多次元配列はなぜ必要???
-
javaでEUC-JP文字列→UTF-8への変換
-
javaで大容量テキストファイル...
-
[Ljava.lang.Stringってなんですか
-
【Ajax通信&Java】配列の受け取...
-
CSVファイルの、列だけ取得したい
-
配列をセッションに割り当てた後で
-
配列を使ってカレンダーを表示...
-
System.err. printlnとSystem.o...
-
C言語のポインターに関する警告
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javaで文字と数字が混ざったも...
-
フローチャート
-
この警告はどうすれば?
-
[Ljava.lang.Stringってなんですか
-
配列で、値の入っている要素数...
-
C#で動的配列Listの中身をListB...
-
配列の中に複数存在する数がい...
-
セッションを使ったint型の値の...
-
【C#】ハッシュテーブル(連想...
-
javaについて
-
javaでの文字列からの数字抽出
-
配列について
-
javaで大容量テキストファイル...
-
配列数を超えてアクセスしたと...
-
【Ajax通信&Java】配列の受け取...
-
『args[]』とは?
-
ArrayListからBean配列に値をセ...
-
C言語でunsigned char配列を連...
-
strutsで2次元配列をやりとりす...
-
javamailで複数人にメールを送...
おすすめ情報