※「セキュリティ保護のため...」というメッセージが出る方・日本語が入力できない方へ

(1)王様探し
例えば100件のデータを並べ替えるのに、最初に最も大きなデータを探し出
して、それを取り出す。次に残ったものの中から最も大きなデータを探し
出す。これを繰り返す。
単純な方法で、基本プログラミングの学習者は最初にやらされるが、とっ
ても遅い。実用性は全くない。これはこの方法では遅いということを学習
することに意味があるのである。
【Coding Sample】
void CSortDlg::KingFind()
{
int i,j;
long sort_cnt = m_dcnt;
if (sort_cnt<=1)
goto loop_e;
//find king
for (i=0; i<sort_cnt; i++)
{
for (j=i+1; j<sort_cnt; j++)
{
if (m_data[i]>m_data[j])
{
long k;
k = m_data[i];
m_data[i] = m_data[j];
m_data[j] = k;
}
}
// here m_data[i] becomes minimum of data i to wcnt-1
}
loop_e:
return;
}
【実行時間】(Pentium-75MHz VisualC++5.0 Release Mode)
件数 乱順 正順 逆順
KingFind(r) 1000 0.05000 0.06000 0.11000
KingFind(r) 10000 8.23000 5.66000 9.56000
KingFind(r) 30000 76.57000 53.00000 94.75000
ここで、乱順とは、乱数によって生成したランダムなデータ、正順とは既
に並んだデータ、逆順とは、逆に並んだデータです。王様探しの場合は、
元のデータがどう並んでいても、あまり影響がありません。
