サイトマップ / C言語講座出入り口総目次目次:ソート>単純挿入ソート

青い直線

単純挿入ソート

青い直線

[バブルソート]←このソース→[単純選択ソート]

/* 単純挿入ソート */

/* 今日は、単純挿入ソートについて学びます。単純挿入ソートのアルゴリズムは単純です。あらかじめソートが終わっている配列に、データを挿入します。

要素数 n 個の配列があるとします。最初は一番左の1個のデータのソートが済んでいるとします。次に、2 番目の要素をそこに付け加えます。この時点では、1 番目と 2 番目の要素の比較が行われます。これで二つの要素のソートが済んだことになります。

次に、この配列に 3 番目の要素を付け加えます。3番目の要素と2番目の要素の比較が行われ、もし、3 番目の要素の方が小さければ、1 番目の要素との比較も行われ、挿入する位置が決まります。

上記の処理を順次行って行けばソートが終わります。

今回のソースプログラムでは、8 個の要素からなるint 型の配列の要素をソートします。 */

/* ここからソースプログラム */

#include <stdio.h>

#define NUM_DATA 8

void InsSort(int num[ ], int n) ;
void ShowData(int num[ ], int n);
void main(void);

  /* n 個のデータの単純挿入ソートを行う */
void InsSort(int num[ ], int n)
{
    int i, j, temp;

    for (i = 1; i < n; i++) {      /* i 番目の要素をソート済みの配列に挿入 */
        temp = num[i];             /* i 番目の要素を temp に保存 */
        for (j = i; j > 0 && num[j-1] > temp; j--) /* このループで */
            num[j] = num[j -1];                    /* temp を挿入する位置を決める */

        num[j] = temp;             /* temp を挿入 */
        ShowData(num, NUM_DATA);   /* 途中経過を表示 */
    }
}

  /* n 個のデータを表示 */
void ShowData(int num[ ], int n)
{
    while (n--)
        printf("%d  ", *num++);
    printf("\n");
}

void main(void)
{
      /* ソート対象のデータ */
    int num[ ] = {3, 7, 1, 5, 4, 2, 6, 0};	

      /* ソート前のデータの表示 */
    printf("ソート前: ");
    ShowData(num, NUM_DATA);
    printf("\n");

      /* ソート */
    InsSort(num, NUM_DATA);	
    printf("\n");

       /* ソート後のデータの表示 */
    printf("ソート後: ");
    ShowData(num, NUM_DATA);
    printf("\n");
}

/* ここまでソースプログラム */

/* プログラムを実行すると、要素の交換が行われた時に、ソートの途中経過も表示されます。単純挿入ソートのアルゴリズムを理解するのに役立つでしょう。 */

[バブルソート]←このソース→[単純選択ソート]

青い直線

/* (C) 2000- YFプロ. All Rights Reserved. */    提供:C言語講座−それ自体コンパイルできる教材を使った講座です−

青い直線

サイトマップ / C言語講座出入り口総目次目次:ソート>単純挿入ソート