基本情報 アルゴリズムについて質問です。a イが正解なのはなぜですか?b オが正解なのはなぜですか?

1件の回答

回答を書く

1151661

2026-03-10 00:40

+ フォロー

>a イが正解なのはなぜですか?

>b オが正解なのはなぜですか?





以下順を追って解説





C言語で、T[5]としたとき T[0]ダミー, T[1]~T[5]



ポイント

a) これは選択ソートです。(昇順(最小値)/降順(最大値))

  ...選択ソートの特徴は以下

  .....最小値と、最小値の添え字を記憶

        Min = T[j];

        MinCnt = j;

  .....記憶した情報と入替え

        W = T[i];

        T[i] = T[MinCnt];

        T[MinCnt] = W;



b) 一つのデータとそれ以外と比較する

b-1 外側ループは(N-1)回処理する(最後の比較が一つと一つで比較)

b-2 内側ループは比較対象データ群なので、外側のデータとそれ以外のデータ群

b-3 内側ループ完了の都度、外側の位置に最小値が求まるので、外側はその情報を除外する(即ち、iは1ずつ進む)



c) 回答群を見渡すと、外側ループ処理 「(i\u0026lt;N)迄」、または、「(i\u0026lt;=N-1)迄」が見当たらない

   即ち、この設問は逆論理回答

c-1 (i\u0026lt;N)の逆論理...... (i\u0026gt;=N)

c-2 (i\u0026lt;=N-1)の逆論理... (i\u0026gt;N-1)...(イ)



d) 回答群を見渡すと、内側ループ処理 「(j\u0026lt;=N)迄」が見当たらない

d-1 (j\u0026lt;=N)の逆論理...... (j\u0026gt;N)....(オ)





~~ [参考Cコード] ~~

#include \u0026lt;stdio.h\u0026gt;

#define GYAKU_RONRI 1   //逆論理



void disp(int d[], int n) {

    for (int i = 1; i \u0026lt;= n; i++) printf(\u0026quot; %d\u0026quot;, d[i]);

    printf(\u0026quot;\
\u0026quot;);

}



int main(void){

    int T[] = {-1, 5, 3, 4, 1, 2};  // T[0]は未使用

    int N = 5;                      // T[1]〜T[5]が対象

    int i, j, MinCnt, Min, W;



    printf(\u0026quot;前: \u0026quot;); disp(T, N);



    i = 1;

#ifdef GYAKU_RONRI      //逆論理

    while( !(i \u0026gt; N - 1) ){  // i = 1〜4まで処理 (イ)

#else

    while(i \u0026lt; N){  // i = 1〜4まで処理

#endif

        MinCnt = i;

        j = i + 1;

        Min = T[i];

#ifdef GYAKU_RONRI      //逆論理

        while( !(j \u0026gt; N) ){  // j = i+1〜5まで比較 (オ)

#else

        while(j \u0026lt;= N){  // j = i+1〜5まで比較

#endif

            if (T[j] \u0026lt; Min) {

                Min = T[j];

                MinCnt = j;

            }

            j = j + 1;

        }

        // 要素の交換

        W = T[i];

        T[i] = T[MinCnt];

        T[MinCnt] = W;



        i = i + 1;

    }



    printf(\u0026quot;後: \u0026quot;); disp(T, N);

    return 0;

}







~~ [結果] ~~

\u0026gt;main

前:  5 3 4 1 2

後:  1 2 3 4 5



うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有