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

青い直線

単純選択ソート

青い直線

[単純挿入ソート]←このソース→[シェルソート]

/* 単純選択ソート */

/* 今日は、単純選択ソートについて学びます。単純選択ソートのアルゴリズムは単純です。

要素数 n 個の配列があるとします。配列の一番左の要素と、残りの全ての要素と比較して、残りの要素の最小値の方が、一番左の要素より小さければ交換します。

次に配列の 2 番目の要素と、残りの全ての要素と比較して、残りの要素の最小値の方が、2 番目の要素より小さければ交換します。

この処理を、順次、n - 1 番目の要素まで行うと、ソートが完了します。今回のソースプログラムでは、8 個の要素からなるint 型の配列の要素をソートします。 */

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

#include <stdio.h>

#define NUM_DATA 8

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

  /* n 個のデータの単純選択ソートを行う */
void SimSelSort(int num[ ], int n)
{
    int i, j, k, min, temp;

    for (i = 0; i < n - 1; i++) {
        min = num[i];                 /* i 番目の要素を暫定的に最小値とし */
        k = i;                        /* 添字を保存 */
        for (j = i + 1; j < n; j++) {
            if (num[j] < min) {       /* より小さい値が現れたら */
                min = num[j];         /* 最小値の入れ替え */
                k = j;                /* 添字を保存 */
            }
        }                             /* このループを抜けるとk に最小値の添字が入っている */
        temp = num[i];                /* i 番目の要素と最小値の交換 */
        num[i] = num[k];
        num[k] = temp;
        ShowData(num, NUM_DATA);
    }
}

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

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

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

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

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

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

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

[単純挿入ソート]←このソース→[シェルソート]

青い直線

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

青い直線

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