ソースコード
#include <stdio.h>
int main(void){
int numbers[] = {10,2,12,7,16,8,13};
int numbersCount = (sizeof numbers / sizeof numbers[0]);
int i,j;
for(j=0;j<numbersCount;j++){
for (i=0;i<numbersCount-1;i++) {
int num1 = numbers[i];
int num2 = numbers[i+1];
if(num1 > num2){
numbers[i] = num2;
numbers[i+1] = num1;
}
}
}
//view
for (i=0; i<numbersCount; i++) {
printf("%d\n",numbers[i]);
}
return 0;
}
解説
C言語の基礎は過去記事や、他サイトで簡単に勉強できるので、そちらで出来ていることが前提とします。
他の言語と同様のフロー図なので、詳細の解説は省きますが、あまりC言語を使わない僕としては、配列の扱いに少し戸惑ったので、その点を備忘録としておきます。
1. 配列の宣言
#宣言指定有り
int numbers[7] = {10,2,12,7,16,8,13};
# 宣言指定なし
int numbers[] = {10,2,12,7,16,8,13};
厳密にメモリ管理をしたい場合は宣言指定をちゃんと行って管理する必要がありますが、
宣言で要素数指定ができない任意プログラムの方が汎用性があるので、なし記述の方が一般的な気がしますね。
2. 要素数の取得
配列の要素数を取得するには、配列のサイズを取得して、配列0番目の要素サイズで割ることで、要素数が取得できます。
→C言語の配列は、要素別にサイズが違っても最大値に合わさることがよくわかりますね。
#include <stdio.h>
int main(void){
int numbers[] = {10,2,12,7,16,8,13};
int a = sizeof numbers;
int b = sizeof numbers[0];
int c = a / b;
printf("size:%d / %d = %d\n",a,b,c);
return 0;
}
結果
$ gcc -o bubbleSort bubbleSort.c
$ ./bubbleSort
2
7
8
10
12
13
16
1行目はコンパイルでそれにより出来たファイルを2行目で実行です。
今までのインタプリタ言語と違ってコンパイルは面倒くさいですが、PCアプリでは、コンパイル言語はスピードが早いという特性があるので、こうした言語特性を数多く覚えることもスキルアップにとって重要な事でしょうね。
まとめ
普段あまり使わないC言語で配列処理に若干だけ戸惑いましたが、さすがに基本言語と言われるだけあって、慣れると扱いは楽そうです。
ポインタなども使い慣れて使いこなさないとな〜〜〜と思いますね。
アルゴリズム過去記事
いろいろなプログラム言語でアルゴリズム学習
0 件のコメント:
コメントを投稿