PG13-6S

Similar documents
Taro-再帰関数Ⅲ(公開版).jtd

次に示す数値の並びを昇順にソートするものとする このソートでは配列の末尾側から操作を行っていく まず 末尾の数値 9 と 8 に着目する 昇順にソートするので この値を交換すると以下の数値の並びになる 次に末尾側から 2 番目と 3 番目の 1

Microsoft PowerPoint - kougi10.ppt

PowerPoint Presentation

プログラム言語及び演習Ⅲ

データ構造

program7app.ppt

DA13

Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - kougi7.ppt

Microsoft Word - no12.doc

論理と計算(2)

Taro-再帰関数Ⅱ(公開版).jtd

情報処理Ⅰ

Taro-リストⅠ(公開版).jtd

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

PowerPoint Presentation

Taro-最大値探索法の開発(公開版

Microsoft PowerPoint - kougi2.ppt

Microsoft PowerPoint - kougi11.ppt

Microsoft PowerPoint - kougi6.ppt

C言語によるアルゴリズムとデータ構造

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

C 言語講座 Vol 年 5 月 29 日 CISC

Taro-プログラミングの基礎Ⅱ(公

Microsoft PowerPoint - 計算機言語 第7回.ppt

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Microsoft PowerPoint - kougi4.ppt

論理と計算(2)

Taro-リストⅢ(公開版).jtd

Microsoft PowerPoint - IntroAlgDs pptx

memo

Microsoft PowerPoint - 05.pptx

memo

基礎計算機演習 実習課題No6

£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裶²ó ¨¡ À©¸æ¹½Â¤¡§·«¤êÊÖ¤· ¨¡

gengo1-11

Microsoft PowerPoint - lec4.ppt

Prog1_6th

Microsoft PowerPoint - kougi8.ppt

DVIOUT

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Prog1_10th

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

C言語7

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

プログラミング基礎

/* do-while */ #include <stdio.h> #include <math.h> int main(void) double val1, val2, arith_mean, geo_mean; printf( \n ); do printf( ); scanf( %lf, &v

第9回 配列(array)型の変数

Microsoft PowerPoint - ppt-7.pptx

2

新・明解C言語で学ぶアルゴリズムとデータ構造

DVIOUT

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

PowerPoint Presentation

Microsoft PowerPoint - 06.pptx

tuat1.dvi

Microsoft Word - no15.docx

memo

新・明解C言語 ポインタ完全攻略

cp-7. 配列

PowerPoint プレゼンテーション

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

Microsoft Word - 13

Taro-ビット処理(公開版).jtd

2

Microsoft PowerPoint - ca ppt [互換モード]

データ構造

第2回

memo

模擬試験問題(第1章~第3章)

r07.dvi

ohp07.dvi

PowerPoint プレゼンテーション

Microsoft Word - no204.docx

r08.dvi

Microsoft PowerPoint - Pro110111

プログラミング入門1

2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

kiso2-09.key

PowerPoint プレゼンテーション

ohp08.dvi

Microsoft Word - 09isA11_mod.doc

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

memo

BW BW

プログラミング基礎

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Excel2013 データベース1(テーブル機能と並べ替え)

1. 入力した正の整数を降順に並べ換えて出力するプログラムを作成せよ プログラムは個別にコンパイルし make コマンドで実行すること 入力データは 50 以下とし 以下の数が混在しているとする 16 進数 : 先頭 1 文字が x または X( エックスの小文字か大文字 ) 8 進数 : 先頭 1

< F2D837C E95CF CF68A4A94C5816A2E6A>

Microsoft Word - 教科書大1b第12週06.doc

Microsoft Word - no103.docx

データ構造とアルゴリズム論

II ( ) prog8-1.c s1542h017%./prog8-1 1 => 35 Hiroshi 2 => 23 Koji 3 => 67 Satoshi 4 => 87 Junko 5 => 64 Ichiro 6 => 89 Mari 7 => 73 D

Taro-ファイル処理(公開版).jtd

Taro-2分探索木Ⅱ(公開版).jtd

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft Word - Cプログラミング演習(12)

Transcription:

プログラム演習 I レポート 学籍番号 担当教員 : 小林郁夫 氏名 実習日平成 26 年 7 月 4 日 提出期限 7 月 11 日提出日 7 月 17 日 1 週遅れ 第 13 回 テーマ : 並べ替えのアルゴリズム 教員使用欄 15 S A B C 再提出 課題 1 バブルソートの実行画面

プログラムのソースコード // day13_akb1.cpp : コンソールアプリケーションのエントリポイントを定義します // #include "stdafx.h" #include "conio.h" extern void bubble_sort(int x[], int count); int _tmain(int argc, _TCHAR* argv[]) int x[] = 5, 1, 8, 7, 4, 2, 0 ; int i, count; // 個数を数える for (i = 0, count = 0; x[i]; i++) count++; printf(" 並べ替え前 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); bubble_sort(x, count); printf("\n 並べ替え後 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); _getch(); return 0; void bubble_sort(int x[], int count)

bool swapped; int i, y; printf("\n** バブルソートの実行 **\n"); do swapped = false; for (i = 0; i < count - 1; i += 2) if (x[i]>x[i + 1]) y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true; for (i = 1; i < count - 1; i += 2) if (x[i]>x[i + 1]) y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true; while (swapped); swapped = false; で swapped を false にする for (i = 0; i < count - 1; i += 2) で1 番目の数字から順番に見る if (x[i]>x[i + 1]) で次の数字と比較して大きかったら y = x[i]; で一時的に y に移す x[i] = x[i + 1]; で位置を交換して x[i + 1] = y; で移した数をもとに戻す swapped = true; で swapped を true にする 次に 2 番目の数字から同じように並び替えをする while (swapped); swapped が true の場合はこれをループする

選択ソートの実行画面 小林のミスで これは選択ソ ートですね プログラムのソースコード // day13_akb1.cpp : コンソールアプリケーションのエントリポイントを定義します // #include "stdafx.h" #include "conio.h" extern void bubble_sort(int x[], int count); extern void bucket_sort(int x[], int count); int _tmain(int argc, _TCHAR* argv[]) int x[] = 5, 1, 8, 7, 4, 2, 0 ; int i, count; // 個数を数える

for (i = 0, count = 0; x[i]; i++) count++; printf(" 並べ替え前 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); // bubble_sort(x, count); bucket_sort(x, count); printf("\n 並べ替え後 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); _getch(); return 0; void bubble_sort(int x[], int count) bool swapped; int i, y; printf("\n** バブルソートの実行 **\n"); do swapped = false; for (i = 0; i < count - 1; i += 2) if (x[i]>x[i + 1]) y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true; for (i = 1; i < count - 1; i += 2) if (x[i]>x[i + 1])

y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true; while (swapped); void bucket_sort(int x[], int count) int i, j; int min_index, swap; printf("\n** バケットソートの実行 **\n"); for (i = 0; i <= count - 2; i++) min_index = i; for (j = i + 1; j <= count - 1; j++) if (x[j] < x[min_index])min_index = j; swap = x[i]; x[i] = x[min_index]; x[min_index] = swap; 選択ソート要素の列を端から順に調べ 一番小さい値を持つ要素を抜き出して最初の要素と交換し さらに未整列の部分から一番小さい値を持つ要素を抜き出して 2 番目の要素と交換し という操作を繰り返してソートする ( 昇順ソートの場合 ) ( 引用 :http://e-words.jp/w/e981b8e68a9ee382bde383bce38388.html) 選択ソートは最初の要素を設定して 残りの要素と比較しながら 小さいものがあれば 交換するという方法で バブルソートと違って毎回入れ替える作業が減るため 選択ソ ートの方が早く並べ替えられる

おまけの課題 挿入ソート対象集合の先頭付近がソートされているとして 対象集合の未ソートの部分から要素を順次取り出し, それまでに取り出した要素の集合に順序関係を保つよう挿入してソートを行う方法 マージソート対象集合を単純に2 等分した区分にします それぞれの区分内でソートされていれば 2つの区分をマージ ( 併合 ) することにより 全体がソートされます 区分内でソートされていない場合は それをさらに2 等分して 同様な操作を行います これを繰り返すことにより全体がソートされる クイックソート全体のなかから 中間的な基準となる要素を1つ選び ( ピボット- 枢軸 -という) これより小さい要素と大きい要素の区分に分割します さらに分割した2つの区分の中で分割を行います これを繰り返してソートを行う方法 シェルソートある間隔で要素を取り出した部分列を整列し さらに間隔をつめた部分列を取り出してソートする方法です ある一定間隔おきに取り出した要素からなる部分列をそれぞれソートし ( このときに挿入ソートや他の方法を用いることもあります ) 更に間隔を詰めて同様の操作を行い 間隔が1になるまで繰り返すことによりソートが実現する ヒープソート 未整列の部分を木構造の順序木 ( ヒープ構造 ) に構成し そこから最大値又は最小値を 取り出して既整列の部分に移す この操作を繰り返して 実整列部分を縮めていく方法 ( 引用 :http://www.kogures.com/hitoshi/webtext/al-sort-syurui/index.html)

発展課題 1 挿入ソート 実行画面 プログラムのソースコード // day13_akb1.cpp : コンソールアプリケーションのエントリポイントを定義します // #include "stdafx.h" #include "conio.h" extern void bubble_sort(int x[], int count); extern void bucket_sort(int x[], int count); void extern insertion_sort(int x[], int count); int _tmain(int argc, _TCHAR* argv[]) int x[] = 5, 1, 8, 7, 4, 2, 0 ; int i, count;

// 個数を数える for (i = 0, count = 0; x[i]; i++) count++; printf(" 並べ替え前 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); // bubble_sort(x, count); // bucket_sort(x, count); insertion_sort(x, count); printf("\n 並べ替え後 \n"); for (i = 0; x[i]; i++) printf("%d: %d\n", i, x[i]); _getch(); return 0; void bubble_sort(int x[], int count) bool swapped; int i, y; printf("\n** バブルソートの実行 **\n"); do swapped = false; for (i = 0; i < count - 1; i += 2) if (x[i]>x[i + 1]) y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true;

for (i = 1; i < count - 1; i += 2) if (x[i]>x[i + 1]) y = x[i]; x[i] = x[i + 1]; x[i + 1] = y; swapped = true; while (swapped); void bucket_sort(int x[], int count) int i, j; int min_index, swap; printf("\n** バケットソートの実行 **\n"); for (i = 0; i <= count - 2; i++) min_index = i; for (j = i + 1; j <= count - 1; j++) if (x[j] < x[min_index])min_index = j; swap = x[i]; x[i] = x[min_index]; x[min_index] = swap; void insertion_sort(int x[], int count) int i, j, y; printf("\n** 挿入ソートの実行 **\n"); for (i = 1; i < count; i++) y = x[i]; for (j = i; j > 0 && x[j - 1] > y; j--) x[j] = x[j - 1];

x[j] = y; プログラムの説明 for (i = 1; i < count; i++) で1 番目の数字から見るでyに移すy = x[i]; for (j = i; j > 0 && x[j - 1] > y; j--) x[j] = x[j - 1]; で挿入する位置を決める x[j] = y; で y を挿入する 課題 2 実行画面

保存されたデータ 追加したプログラム