Home > C++ | Tips > C++ ランダムソート 1

C++ ランダムソート 1

C++でファンクタだけでランダムソートを作ろうとちょっとがんばってみたけどだめだった。


template< typename T >
class RandomSorter {

public:
    RandomSorter(){}

    bool operator()(T a, T b) {
        int seedA = 0;
		int seedB = 0;
		int memorySize;
		int randA;
		int randB;

		memorySize = std::min(sizeof(T), sizeof(int));

		memcpy(&seedA, &a, memorySize);
		memcpy(&seedB, &b, memorySize);

		srand(seedA);
		randA = rand();
		srand(seedB);
		randB = rand();

		return randA < randB;
    }
};

引数のa, bを無理やりint型に当てはめて、その値でsrand()することで乱数の値を一定にし、最後の比較をソート処理全体で矛盾が生じないようにしたつもりなんだけども、どうもsrand()のシードの大小とその結果作成されるrand()の大小が一致するようだ。例えばTがint型だったらseedA = a, seedB = bとなるわけだが、ほとんどの場合でseedA > seedB ⇒ randA > randBとなる(VS2008の場合)。したがって意図したようなソートにならない。もう一工夫必要なのか。

以上

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=260
Listed below are links to weblogs that reference
C++ ランダムソート 1 from コスミー報告書[社外秘]

Home > C++ | Tips > C++ ランダムソート 1

Search
Feeds
Meta
 合計:016020
 今日:0018 昨日:0168

Return to page top