問題
- 下のプログラム中、ソート部分を、バブルソートで実現しなさい
- 前向きに(後ろから前に向かい)、先頭に最小値が移動するようにせよ
- 逆に、後ろ向きに(前から後ろに向かい)、最後尾に最大値が移動する方法もあり。
- 教科書は、後ろ向きの実現例です。
- 教科書 p.48の工夫 (どこかを交換したかどうかのフラグをたてる。どこも交換しなくなったら、もうソート完了のはず)は、自習 (p.171に回答例)
実行例
解答例
[プログラムテンプレート(未完)]コードをハイライトすると、簡単な文法解説が表示されます(現在、停止中)
#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 t; /* 挿入対象の値 */ set_array(); // N個乱数を配列にセット print_array(); // ソート前プリント /* a[]をバブルソートする */ for (i = 0; i < N ; i ++) { for (j = N - 1 ; j > i ; j--) { /* jは最後尾から前向き */ if (a[j-1] > a[j]) { /* 隣り合う2つを比較 */ temp = a[j]; /* 交換 */ a[j] = a[j-1]; a[j-1]=temp; } } } print_array(); // ソート後プリント return 0; }
アドバイス