ソフトウェア会社の研修時代に作成したプログラムです。
参考になればうれしいです。
今回の研修プログラムは単純選択法というアルゴリズムを使用してデータを降順に整列するという内容です。
単純選択法は「データを選択して先頭から順番に並び替えていく」という処理で、ソートアルゴリズムの中でも初心者が1番理解しやすいものです。
降順にソートする単純選択法の処理の流れは大きく2つです。
・探索範囲から最大値を検索する。
・検索した最大値と配列の先頭を入れ替える。
あとはこの2つの処理をひたすら繰り返してデータをソートします。
Sample Code
/*****************************************************************************
単純選択法 int array[10]を降順にソートするプログラム
<lesson_012.c> ver1.00
------------------------------------------------------------------------------
作成日:
作成者:
*****************************************************************************/
//---ヘッダファイル---
#include <stdio.h>
//---マクロ宣言---
#define NUMBER 10
/*****************************************************************************
---main関数---
*****************************************************************************/
int main(void)
{
int i;
int j;
int idxMax; //比較対象配列の添え字
int w = 0; //入れ替え用の変数
int array[NUMBER] = {1, -1, 3, 89, 5, 11, 66, 8, 9, 10};
/* ソート前の配列を出力する */
printf("ソート前の配列:");
for(i = 0; i < NUMBER; i++)
{
printf("%3d", array[i]);
}
printf("\n");
/* 最後の1つはソートしないのでi < (NUMBER - 1)が終了条件 */
for(i = 0; i < (NUMBER - 1); i++) //0~8まで
{
j = i + 1; //jにiの次の配列の添え字を代入
idxMax = i; //idxMaxには最大値の入った配列の添え字を代入
//ループ1回目は先頭の添え字0を代入
/* 最大値をサーチする処理 */
while(j < NUMBER)
{
if(array[idxMax] < array[j]) //array[j]のほうが大きい
{
idxMax = j; //idxMaxに最も大きい添え字jの値を代入
}
j++; //jを次の要素に進める
}
/* 最大値を入れ替えて配列先頭側に大きい数値がくるようにする */
w = array[i]; //array[i]を入れ替え用変数wに退避
array[i] = array[idxMax]; //array[i]に最大値array[idxMax]を代入
array[idxMax] = w; //退避させていたwをarray[idxMax]に代入
}
/* ソートした配列を出力する */
printf("ソート後の配列:");
for(i = 0; i < NUMBER; i++)
{
printf("%3d", array[i]);
}
printf("\n");
return 0;
}
実行例
その他:研修で作成したC言語プログラム
その他のC言語プログラムはこの投稿にまとめてあります!
C言語の初心者用コードなので是非活用して下さい。
【C言語】研修 サンプルプログラム集
コメント