問題
- 下のプログラム中、ソート部分を、選択ソートで実現しなさい
実行例
解答例
[解答例]コードをハイライトすると、簡単な文法解説が表示されます(現在、停止中)
#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 k; /* 最小はk番目 */ int tmp; /* swap用 */ set_array(); // N個乱数を配列にセット print_array(); // ソート前プリント /* ソート部 */ /* 解答 */ /* p.170のプログラムの変数minが、変数kにあたっています */ for (i = 0; i < N; i++) { k = i; /* 暫定最小値 添え字はk, 値はa[k] まずはiにセット*/ for (j = i + 1; j < N ; j++) { if (a[j] < a[k]) { /* j番目の値が、暫定一位k番目の値より小さい */ k = j; /* 暫定最小値の添え字を更新 */ } } tmp = a[i]; /* 比較範囲の先頭a[i]と、最小値a[k]を交換する */ a[i] = a[k]; a[k] = tmp; } print_array(); // ソート後プリント return 0; }
アドバイス