1989年開業 技術士 佐伯英子(情報工学部門) 文部科学省登録番号 第22082号 日本技術士会会員 東大阪商工会議所会員

≫サンプルプログラム一覧 

オープンソース/C言語サンプルプログラム  選択ソート(整列)

●選択ソートのアルゴリズムを理解するプログラムです。
●整列するデータは、配列に初期値として格納しておきます。
●先頭の要素から順次、小さい値が選択され格納されていきます。
●1回の選択ごとに途中経過を表示します。
 ≫ソースファイルのダウンロード: sort01.c

【問題】
●途中経過を観察して、選択ソートのアルゴリズムを確認してみよう。
●データの数値を変えてみよう。
●データを20個に増やしてみよう。
●プログラム中のfor文
   for( iS=0; iS<iE; iS++ ) // 先頭から整列
 において、MAX-1 ではなく 変数 iE を使う利点を考察しなさい。
●要素の入れ替えがあったときだけ、途中経過を表示するように変更
 してみよう。
●降順に並べ替えるように変更してみよう。

/************************/
/*  選択ソート(昇順)  */
/************************/
#include <stdio.h>
#define  MAX 10
void  main( )
{
  int  data[MAX]={ 80,5,36,23,12,100,45,9,1,78 };
  int  iE=MAX-1;// 配列終点添字
  int  iS;      // 整列始点添字
  int  iM;      // 最小要素添字
  int  i,w;

    printf("\n●選択ソート(昇順)●\n");

    printf("\nソート前\n");
    for( i=0; i<MAX; i++ ) printf("%d ",data[i]);
    printf("\n");

    printf("\n途中経過\n");

    for( iS=0; iS<iE; iS++ )                // 先頭から整列
      {
        //--最小要素検索--
        for( iM=iS,i=iS+1; i<MAX; i++ )
          {
            if ( data[i]<data[iM] ) iM=i;
          }

        //--最小要素入れ替え--
        if ( iS!=iM )
          {
            w=data[iM]; data[iM]=data[iS]; data[iS]=w;
          }

        //--途中経過表示--
        printf("%2d) ",iS);
        for( i=0; i<MAX; i++ ) printf("%d ",data[i]);
        printf("\n");
      }

    printf("\nソート後\n");
    for( i=0; i<MAX; i++ ) printf("%d ",data[i]);
    printf("\n");
}
   

※SSL暗号化通信対応

佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601  E-mail: info@saeki-pe.com