ページ 11

整列の効率性の比較

Posted: 2011年6月02日(木) 19:37
by まい
こんばんゎ。
c言語で期限が明日までの課題があるんですが、私1人じゃ終わりません!
誰か課題をやってくれるネ申はいませんかー
お願いします♪

課題
ファイルにあるデータを配列に格納し、下記の4種類の整列アルゴリズムを用いて整列する。このとき移動回数および実行時間(clock関数)を記録する。
   (1) 単純挿入法
   (2) 単純選択法
   (3) バブルソート
   (4) クイックソート

ファイルには整数がランダムに10,000コあります。
ex.
6378
90042
32786
31124
89571
3867





参考までに授業で使用した資料を以下においておきます。
すべてパスは
777
です。

http://www.rupan.net/uploader/download/1307010327.pdf
http://www.rupan.net/uploader/download/1307010502.pdf
http://www.rupan.net/uploader/download/1307010892.pdf

Re: 整列の効率性の比較

Posted: 2011年6月02日(木) 20:02
by bitter_fox
まい さんが書きました:こんばんゎ。
c言語で期限が明日までの課題があるんですが、私1人じゃ終わりません!
誰か課題をやってくれるネ申はいませんかー
お願いします♪
この掲示板では課題の丸投げを禁じています。(フォーラムルールをご確認ください)
お手伝いならさせていただきます。
まい さんが書きました: 課題
ファイルにあるデータを配列に格納し、下記の4種類の整列アルゴリズムを用いて整列する。このとき移動回数および実行時間(clock関数)を記録する。
   (1) 単純挿入法
   (2) 単純選択法
   (3) バブルソート
   (4) クイックソート
これらのアルゴリズムはどれぐらいわかりますか?

まい さんが書きました: ファイルには整数がランダムに10,000コあります。
ex.
6378
90042
32786
31124
89571
3867



ではまず、ファイルから10000個の整数を読み込むプログラムを作って見てください。(このプログラムを枠組みに各ソートアルゴリズムを調べていきましょう)

[hr][修正・ここから]
資料3のプログラムが枠組みになっているんですね。
資料3のプログラムを実行できるようにしてみてください。(未定義の各種ソート関数を適切に定義してみてください。)
[ここまで][hr]
まい さんが書きました: 参考までに授業で使用した資料を以下においておきます。
すべてパスは
777
です。

http://www.rupan.net/uploader/download/1307010327.pdf
http://www.rupan.net/uploader/download/1307010502.pdf
http://www.rupan.net/uploader/download/1307010892.pdf
資料の転載の許可は教授からいただいていますか?
この教授のウェブサイトを見させていただきましたがいずれの資料も認証を以てアクセスするようになっていました、これを勝手に転載するのは情報モラル的に問題があると思うのですが・・・

[hr][追記]
資料は一通り見させてもらいました、基本的な部分は資料のコードをコピペすれば終わりますね。

COUNTに関しても手を加える必要がありますが、これも非常に簡単です。
COUNT(交換回数)については資料1の最後に書かれていますので、ここを参考になさってください。

資料では単純選択法を例にとって説明しているので例として二分挿入法を修正してみます。

コード:

void sort_binary(int size, int *array)
{
	int i, j, x;
	int mid, low, high;

	for (i = 1; i < size; i++)
	{
		x = array[i];
		COUNT++;
		low = 0;
		high = 1;

		while (low < high)
		{
			mid = (low + high) / 2;
			if (array[mid] <= x)
			{
				low = mid + 1;
			}
			else
			{
				high = mid;
			}
		}

		j = i;
		while (j >= high + 1)
		{
			array[i] = array[j - 1];
			COUNT++;
			j--;
		}

		array[j] = x;
		COUNT++;
	}
}

コード:

x = array[i];
COUNT++;

array[i] = array[j - 1];
COUNT++;

array[j] = x;
COUNT++;
これらよりarray[何か]が代入演算子の文に登場していればCOUNTをインクリメントすればいいことが分かります。
[修正]
二分挿入法のコードの誤りを修正しました。