STEP 7.2 (insertion sort) (Sort Bの方法)

問題

実行例

アドバイス

例題集

解答例

[プログラムテンプレート(未完)]

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

#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 = 1; i < N; i++) {
        t = a[i]; /* 新規追加の値。挿入対象の値  */
        for (j = i - 1; j >= 0; j-- ) {  /* jは前へ進む */
             if (a[j] > t )      /* j番目の値が、tより大きい */
                 a[j+1] = a[j];  /* その値は一つ後ろのj+1番へ動かす */
             else
                 break;
        }
        a[j+1] = t;   /* tがa[j]より大きくない。なら、その後ろにtを。
                     あるいはjが0を超えた。なら、a[0]=tだ (先頭に挿入) */
     }

    print_array(); // ソート後プリント

    return 0;
}