問題
- 下のプログラム中、ソート部分を、挿入ソートで実現しなさい
- なぞりの言葉を、大切に。自分は、どうやっているかを言葉にしておくこと。
- 整列済みの系列の適当な位置に、最後尾の要素を移動させる(挿入する)
- この操作をどのようにとらえただろう。自分の手続きを、ぜひ、プログラムコードへ。
- 1. 各要素と比較して、その要素が大きいなら、後ろへずれてもらおう。
- 適切な位置に、挿入しよう。
- 2.後ろの要素から、前へ向かって、おかしな順番になっている2つを交換する。
- おかしな順番でなくなれば、挿入完了 (先頭に挿入する場合も完了。最悪の場合)
- 教科書 p.170の解答例です。
- 1.の人が多いのではないだろうか。
- ぜひ、こちらのなぞりも実装してみてください。
実行例
解答例
[プログラムテンプレート(未完)]コードをハイライトすると、簡単な文法解説が表示されます(現在、停止中)
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 int a[100]; void set_array(void); void print_array(void); void set_array (void) { //100未満の乱数 N個生成して、配列にセット int i; srand((unsigned)time(NULL)); for(i = 0; i < N; i++) a[i] = rand()%100; } void print_array() { // 配列をプリント int i; printf(" i:"); for(i=0; i < N; i++) { printf("%3d ",i); } printf("\n"); printf("a[i]:"); for(i=0; i < N; i++) { printf("%3d ",a[i]); } printf("\n"); printf("\n"); } int main(void){ int i,j; /* 必要な変数を追加のこと */ int tmp; /* 交換バックアップ用 */ set_array(); // N個乱数を配列にセット print_array(); // ソート前プリント /* a[]を挿入ソートする */ /* なぞり ←→ アルゴリズムとして言葉で整理 ←→ プログラムコード *// /* 2022.1.11 プログラムツールへ (見たら、かなりヒントになります) */
print_array(); // ソート後プリント return 0; }
アドバイス