C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ランダムソート


(過去ログ 59 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■34112 / inTopicNo.1)  ランダムソート
  
□投稿者/ ナナメセン (5回)-(2009/03/19(Thu) 11:24:16)

分類:[.NET 全般] 

myclass 型の配列をランダムに並び替えたいのですが

Private Class mycomparer
Implements IComparer(Of myclass)

Public Function Compare(ByVal x As myclass, ByVal y As myclass) As Integer _
Implements System.Collections.Generic.IComparer(Of myclass).Compare

Return Int(Rnd()*2)*2-1 '半々の確率で-1か1を返す

End Function

End Class

としても安全でしょうか?

(コードは VB ですが、質問自体は .NET 全般に関わることと思います)
引用返信 編集キー/
■34113 / inTopicNo.2)  Re[1]: ランダムソート
□投稿者/ なちゃ (256回)-(2009/03/19(Thu) 11:29:44)
配列、シャッフルなどのキーワードで調べて、ソート以外の方法を使ってください。

ソート機能は一貫性のない比較など想定外ですから、何が起こるか分かりません。

引用返信 編集キー/
■34115 / inTopicNo.3)  Re[1]: ランダムソート
□投稿者/ επιστημη (1836回)-(2009/03/19(Thu) 11:51:17)
επιστημη さんの Web サイト
> myclass 型の配列をランダムに並び替えたいのですが

ランダム・シャッフルじゃん。ソートじゃなく。

「配列の総素数に満たない大きさの二つの乱数 i, j に対し、配列の i番目 と j番目 を交換する。」
を何度か繰り返せばいんじゃねっすか?


引用返信 編集キー/
■34150 / inTopicNo.4)  Re[2]: ランダムソート
□投稿者/ 長月葵 (47回)-(2009/03/20(Fri) 00:02:47)
長月葵 さんの Web サイト
No34115 (επιστημη さん) に返信
> 「配列の総素数に満たない大きさの二つの乱数 i, j に対し、配列の i番目 と j番目 を交換する。」
> を何度か繰り返せばいんじゃねっすか?
 理屈は一緒なんですが
「iを配列の頭から順次大きくしていってiとi+jを交換する (jは "i+j<要素数" を満たす乱数)」
と移動した値が元の位置に戻ることが無くてばらけやすいのでオススメですよ。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -