ソフトウェア会社の研修時代に作成したプログラムです。
参考になればうれしいです。
今回の研修プログラムは、バブルソートというアルゴリズムを使用してデータを昇順に整列するという内容です。
バブルソートは「隣合ったデータを比較して逐次入れ替えていく」という処理で、単純選択法に比べて高速にデータを整列することが出来ます。
昇順に整列するバブルソートの処理の流れは大きく3つです。
・先頭から順番に隣のデータと大小関係を比較する。
・隣の要素よりも大きければ入れ替える。
・配列の要素数ー1だけ上の処理を繰り返す。
Sample Code
/*****************************************************************************
バブルソート int array[10]を昇順にソートするプログラム
<lesson_013.c> ver1.00
------------------------------------------------------------------------------
作成日:
作成者:
*****************************************************************************/
//---ヘッダファイル---
#include <stdio.h>
/*****************************************************************************
---main関数---
******************************************************************************/
int main(void)
{
int i;
int j;
int w = 0; //入れ替え用変数
int arrayNum; //配列の要素数
int array[] = {1, -1, 3, 89, 5, 11, 66, 8, 9, 10};
/* arrayNumに配列要素数を代入 */
//配列array全体のサイズを1個の要素サイズで割ると要素数が求められる。
arrayNum = sizeof(array) / sizeof(array[0]);
//確認のために出力
printf("sizeof(array):%d\n", sizeof(array));
printf("sizeof(array[0]):%d\n", sizeof(array[0]));
printf("arrayNum:%d\n", arrayNum);
/* ソート前の配列を出力する */
printf("ソート前の配列:");
for(i = 0; i < arrayNum; i++)
{
printf("%3d", array[i]);
}
printf("\n");
/* 最後の1つはソートしないのでi < (arrayNum - 1)が終了条件 */
for(i = 0; i < (arrayNum - 1); i++) //0~8まで
{
/* 最大値を隣の要素と比較しながら配列後端まで移動 */
for(j = 0; j < arrayNum - 1; j++)
{
if(array[j] > array[j + 1]) //隣の要素よりも大きい場合
{
w = array[j]; //array[j]を入れ替え用変数wに退避
array[j] = array[j + 1]; //array[j]にarray[j + 1]を代入
array[j + 1] = w; //退避させていたwをarray[j + 1]に代入
}
}
}
/* ソート後の配列を出力する */
printf("ソート後の配列:");
for(i = 0; i < arrayNum; i++)
{
printf("%3d", array[i]);
}
printf("\n");
return 0;
}
実行例
その他:研修で作成したC言語プログラム
その他のC言語プログラムはこの投稿にまとめてあります!
C言語の初心者用コードなので是非活用して下さい。
【C言語】研修 サンプルプログラム集
コメント