※「セキュリティ保護のため...」というメッセージが出る方・日本語が入力できない方へ
↑→ (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

 ここで、乱順とは、乱数によって生成したランダムなデータ、正順とは既
 に並んだデータ、逆順とは、逆に並んだデータです。王様探しの場合は、
 元のデータがどう並んでいても、あまり影響がありません。


↑→
(C)copyright ffortune.net 1995-2007 produced by ffortune and Lumi.
お問い合わせはこちらから