/* * 単純選択ソートの例 * T. Watanabe * (日本語の文字コードはEUC-Jp) */ #include int main(void); int main(void) { int i, j, min_i; /* i番目の最小値を求める, i番目とj番目を比較 */ /* i番目に小さいデータは min_i番目にある */ int min_data; /* i番目に小さいデータの値は min_data */ int data[] = {5, 9, 3, 8, 1, 4}; /* data[] ; 整列すべきデータ */ int n = 6; /* n ; データの個数 */ printf("\n整列前のデータ: data[]= %d, %d, %d, %d, %d, %d\n", data[0], data[1], data[2], data[3], data[4], data[5]); for ( i = 0 ; i < n-1 ; i++ ) { /* このループでi番目の最小値を探す */ min_i = i; /* min_iの初期値としてiを入れておく */ min_data = data[min_i]; /* min_data の初期値を入れる */ printf("\n%d番目の初期値を探す ***************************************************\n", i); for ( j = i+1 ; j < n ; j++ ) { /* 小さい方のデータの場所を探すためのループ */ if ( data[j] < min_data ) { /* data[j]の方がmin_dataより小さかったら */ min_i = j; /* min_iはjである */ min_data = data[min_i]; /* min_dataに最小データを入れる */ printf(" データ比較のForループ%d回目(If文 成立 ): 現在の最小データの場所=%d\n", j, min_i); } else { printf(" データ比較のForループ%d回目(If文 不成立): \n", j); } /* if文の終わり */ } /* 2番目のForループの終わり */ /* 最小データの場所が判明したので実際にデータを入れ替える */ data[min_i] = data[i]; data[i] = min_data; printf("** データの入れ替え: %d番目のデータと%d番目のデータを入れ替えました\n", i, min_i); printf("** 入れ替えたデータ: data[]= %d, %d, %d, %d, %d, %d\n", data[0], data[1], data[2], data[3], data[4], data[5]); } /* 一番大きなForループの終わり */ printf("\n整列後のデータ: data[]= %d, %d, %d, %d, %d, %d\n\n", data[0], data[1], data[2], data[3], data[4], data[5]); return 0; }