STEP 7.1 選択ソート (selection sort) (Sort Aの方法)

問題

実行例

アドバイス

例題集

解答例

[解答例]

コードをハイライトすると、簡単な文法解説が表示されます(現在、停止中)

#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;
}