演習~単純なソーティングアルゴリズム~ バブルソート,選択ソート, 挿入ソートの実行時間比較 演習4プログラムテンプレート データの入出力部分はテンプレートを用意したので,こ れを利用して良い. このプログラムは,実行時に,コマンドライン引数として データが格納されたファイル名を必要とする.n = 1000, 10000, 100000の場合のデータファイルを用意している ので,これを利用して良い. – – – – 演習4プログラムテンプレート n=1000の場合のデータファイル n=10000の場合のデータファイル n=100000の場合のデータファイル 演習4 データのソーティングを行うプログラムを作成し,データ 数を変化させながら,その実行時間を計測せよ. この時,単純なソーティングアルゴリズムと呼ばれるバブ ルソート,選択ソート,挿入ソートの各々のプログラムを 作成・実行し,比較せよ. データ数を増加させた時の実行時間の増加率を確認し, 理論上の増加率(オーダ)と比較せよ. テンプレートの説明 大域変数 struct myData data[MAX_N]には整列対象 のデータが格納される. 関数int read_table(char filename[])は引数で指定され たファイルからキーとデータ値を読み込み,data[]に格納 する.戻り値はデータ数である. 関数void sort(int n)はキーによる整列を行う(各自で作 成する).第1引数はデータ数nである. 関数void print_data(int n)は整列結果を画面に表示す る.第1引数はデータ数nである. 構造体 struct myData 演習5(拡張課題) struct myData { int key; /* キーとなる整数値 */ char *val; /* データ値の文字列 */ }; このプログラムはシェルソートと呼ばれるアルゴリズムを 実現したものである.実行時間を計測し,結果について 考察せよ. void sort(int n){ int h, i, j; struct myData d; for(h = 1; h < n/9; h = h*3+1) ; for(; h > 0; h /= 3){ for(i = h; i < n; i++){ j = i; while(j >= h && data[j].key < data[j-h].key){ d = data[j]; data[j] = data[j-h]; data[j-h] = d; j -= h; } } } a番目とb番目のデータの交換 struct myData d; d = data[a]; data[a] = data[b]; data[b] = d; ISO準拠のC言語処理系の場合,同一型の構造体の代入ではすべて のメンバ変数が一括代入される.以下と同じこと. d.key = data[a].key; data[a].key = data[b].key; data[b].key = d.key; d.val = data[a].val; data[a].val = data[b].val; data[b].val = d.val; } 1 演習結果報告 演習4(余力があれば5も)を行った結果をまとめ,その 結果が得られた理由についての考察を添えてA4レポー トを作成せよ. 2
© Copyright 2024 ExpyDoc